MyBatis对象关联关系---- association与collection
Mybatis处理“一对多”的关系时,需要用到associasion元素。处理”多对一“用collection元素来实现(这两个元素在之前mapper文件中提到过)。
本例子中,假设一名User可以有多个Orders,用associasion来实现关联关系
首先数据库表结构
CREATE TABLE `user` (
`id` int(8) NOT NULL AUTO_INCREMENT,
`username` varchar(20) COLLATE utf8_bin NOT NULL,
`usernumber` varchar(20) COLLATE utf8_bin NOT NULL,
`loginname` varchar(20) COLLATE utf8_bin NOT NULL,
`loginpassword` varchar(20) COLLATE utf8_bin NOT NULL,
`sex` varchar(4) COLLATE utf8_bin DEFAULT NULL,
`birthday` date DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
//orders表中为user_id添加外键,指向user表的id
CREATE TABLE `orders` (
`oid` int(8) NOT NULL AUTO_INCREMENT,
`orderid` varchar(20) COLLATE utf8_bin NOT NULL,
`message` varchar(20) COLLATE utf8_bin DEFAULT NULL,
`user_id` int(8) NOT NULL,
PRIMARY KEY (`oid`),
KEY `1001` (`user_id`),
CONSTRAINT `1001` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
Order实体类
public int oid;
public String orderid;
public String message;
public User user;
//省略get/set方法
Order对象的sql映射文件,order.xml
<mapper namespace="com.mybaits.dao.impl.OrdersImpl">
<resultMap type="com.mybaits.bean.User" id="userResult">
<id property="id" column="id" />
<result property="username" column="username"/>
<result property="usernumber" column="usernumber"/>
<result property="loginname" column="loginname"/>
<result property="loginpassword" column="loginpassword"/>
<result property="sex" column="sex"/>
<result property="birthday" column="birthday" />
</resultMap> <resultMap type="com.mybaits.bean.Orders" id="orderResult">
<id property="oid" column="oid"/>
<result property="orderid" column="orderid"/>
<result property="message" column="message"/>
<!--使用resultMap属性引用上面的User实体映射-->
<association property="user" column="user_id" javaType="com.mybaits.bean.User" jdbcType="INTEGER" resultMap="userResult">
</association>
</resultMap> <select id="findAllOrders" resultMap="orderResult">
select * from orders o left join user u on o.user_id=u.id
</select> <insert id="saveOrder" parameterType="Orders">
insert into orders (orderid,message,user_id) values(#{orderid},#{message},#{user.id})
</insert> </mapper>
OrderTest类
@Test
public void Test2(){
List<Orders> l=order.findOrders();
for(int i=0;i<l.size();i++){
System.out.println(l.get(i));
}
}
订单编号:10001 订单信息:订单1 下单用户:BN
订单编号:10002 订单信息:订单2 下单用户:BN
订单编号:10003 订单信息:订单3 下单用户:qwe
订单编号:10004 订单信息:订单4 下单用户:qwe
订单编号:10005 订单信息:订单5 下单用户:JAVA
利用collection在User对象中关联
1.在User中添加 List<Orders> orders 属性
private List<Orders> orders=new ArrayList<Orders>();//get/set方法
2.User的sql映射文件user.xml
<resultMap type="com.mybaits.bean.User" id="userResult">
<id property="id" column="id" />
<result property="username" column="username"/>
<result property="usernumber" column="usernumber"/>
<result property="loginname" column="loginname"/>
<result property="loginpassword" column="loginpassword"/>
<result property="sex" column="sex"/>
<result property="birthday" column="birthday" />
//collection元素映射 user对象中order的集合属性,resultMap指向下面的order的resultMap
<collection property="orders" ofType="Orders" resultMap="orderResult"></collection>
</resultMap>
<resultMap type="com.mybaits.bean.Orders" id="orderResult">
<id property="oid" column="oid"/>
<result property="orderid" column="orderid"/>
<result property="message" column="message"/>
</resultMap>
<select id="getUOBN" parameterType="string" resultMap="userResult">
select * from user u left join orders o on o.user_id=u.id where u.usernumber=#{usernumber}
</select>
3.测试类
@Test
public void Test11(){
User u=userDao.findUserOrders("01111001");
System.out.println("用户:"+u.getUsername()+"\n订单总数:"+u.getOrders().size());
for(Orders o:u.getOrders()){
System.out.println("订单号:"+o.getOrderid()+"\t订单信息:"+o.getMessage());
} } 用户:BN
订单总数:2
订单号:10001 订单信息:订单1
订单号:10002 订单信息:订单2
MyBatis对象关联关系---- association与collection的更多相关文章
- Mybatis关联查询<association> 和 <collection>
一.背景 1.在系统中一个用户存在多个角色,那么如何在查询用户的信息时同时把他的角色信息查询出来啦? 2.用户pojo: public class SysUser { private Long id; ...
- Mybatis中使用association及collection进行自关联示例(含XML版与注解版)
XML版本: 实体类: @Data @ToString @NoArgsConstructor public class Dept { private Integer id; private Strin ...
- Mybatis中使用association及collection进行一对多双向关联示例(含XML版与注解版)
XML版本: 实体类: package com.sunwii.mybatis.bean; import java.util.ArrayList; import java.util.List; impo ...
- MyBatis对象关联关系----多对多的保存与查询
模拟情景: 对象:学生,课程 关系:一个学生可选多个课程,一门课程可被多个学生选择 一.保存 1.创建数据库表,student,course,student_course,其中student_cour ...
- MyBatis之ResultMap的association和collection标签(一)
1.先说resultMap比较容易混淆的点, 2. Map结尾是映射,Type是类型 resultType 和restltMap restulyType: 1.对应的是java对象中的属性,大小写不 ...
- MyBatis之ResultMap的association和collection标签详解
一.前言 MyBatis 创建时的一个思想是:数据库不可能永远是你所想或所需的那个样子. 我们希望每个数据库都具备良好的第三范式或 BCNF 范式,可惜它们并不都是那样. 如果能有一种数据库映射模式, ...
- mybatis中association和collection的column传入多个参数值
在使用 association和collection 进行关联查询的时候 column 参数可能会有多个,如下: 注意: parameterType 一定要是 java.util.Map
- MyBatis加强(1)~myBatis对象关系映射(多对一关系、一对多关系)、延迟/懒加载
一.myBatis对象关系映射(多对一关系.一对多关系) 1.多对一关系: ---例子:多个员工同属于一个部门. (1)myBatis发送 额外SQL: ■ 案例:员工表通过 dept_id 关联 部 ...
- mybatis之关联关系
前言:在我们之前的hibernate中我们是学过了关联关系的,所以我们在本章给讲一讲mybatis的关联关系. mybatis的关联关系一对多的测试1.通过逆向工程生成Hbook,HbookCateg ...
随机推荐
- LeetCode:5. Longest Palindromic Substring(Medium)
原题链接:https://leetcode.com/problems/longest-palindromic-substring/description/ 1. 题目要求:找出字符串中的最大回文子串 ...
- FRDM-KL25Z开发板上电试用
1. 硬件平台:FRDM-KL25Z开发板,先看下板子,Cortex M0+的内核,板子上自带MMA8451Q的三轴加速度传感器,触摸滑动按键,openSDA调试器.MCU主频48MHz,有16KB ...
- python语法图
- 【连载】Maven系列(三) 进阶
相关文章: 1.<用起来超爽的Maven——入门篇> 2.<用起来超爽的Maven——进阶篇> 一.Maven坐标: Maven世界拥有大量需要构建jar文件,我们需要找一个用 ...
- crm踩坑记(一)
目录 antd es6 Object.entries() Object.keys() Object.getOwnPropertyNames() 很神奇的用法!!! eslint 傻逼 其他 参考 an ...
- 数据结构-排序-shell排序
shell排序 首先,希尔排序适用于待排序列关键有序. 接下来一步步图解SHELL排序 我为了方便理解内部操作.我先把代码输出整理下. #include<iostream> #includ ...
- 成为IT精英,我奋斗7年【转】
这些日子 我一直在写一个实时操作系统内核,已有小成了,等写完我会全部公开,希望能够为国内IT的发展尽自己一份微薄的力量.最近看到很多学生朋友和我当年一样没 有方向 ,所以把我的经历写出来与大家共勉,希 ...
- 【Linux】——搭建redis
1.准备安装文件 redis-3.0.5.tar.gz redis-desktop-manager(可视化管理工具) 2.解压.编译 软件存放目录:/usr/local/software 解压存放路径 ...
- springMVC笔记一
第一章 回顾JavaWeb中的MVC设计模式 1)MVC这种设计模式,不光运用于Web领域,而且也能用于非Web领域 2)今天说的MVC特指一种表现层设计模式,不限于Java语言 第二章 回顾stru ...
- (age|name|sex)+ 脱离顺序控制 并且能添加多个
(age|name|sex)+ 脱离顺序控制 并且能添加多个