》第一步:首先我们先建立两个表,用来展示一对多关联,以及多对一关联(实际解决起来就是一对一关联解决)
》第二步:创建对应的pojo
// book类,每本书只为一人拥有,所以每本书关联一个拥有者
public class Book {
private String bid;
private String bname;
private User user;
// User类,每一个User拥有多本书,所以每个User关联多本书
public class User {
private String uid;
private String uname;
private List<Book> books;
》第三步: 重点来了
>一对多关联,以下是我的思路
1、配置 select 语句,返回的 resultMap 需要把 select 语句中查找到的整理返回到一个特定集合中
<select id="getUsers2" resultMap="UserMap">
select * from t_user t1 left join t_book t2 on t1.uid = t2.userId
</select>
2、创建 resultMap ,其中需要包含 User 中的元素 还需要 关联表中的元素 这里是一对多,所以<collection>中使用ofType
<resultMap type="User" id="UserBasicMap">
<id property="uid" column="uid"/>
<result property="uname" column="uname" />
</resultMap>
<resultMap type="User" id="UserMap" extends="UserBasicMap">
<collection property="books" ofType="Book" resultMap="com.kgc.mybatis.pojo.BookMapper.BookBasicMap"/>
</resultMap>
引用的Book 中的如下:
<resultMap type="Book" id="BookBasicMap" >
<id property="bid" column="bid"/>
<result property="bname" column="bname"/>
</resultMap>
JavaType和ofType的区别: JavaType和ofType都是用来指定对象类型的,但是JavaType是用来指定pojo中属性的类型,而ofType指定的是映射到list集合属性中pojo的类型。
到这里一对多基本配置完了,我们用对象User 去接收 返回的集合时就能在 User 中的集合 books 中看到关联的书了
> 多对一 ,类似 一对一 ,一个 关联另一个
<resultMap type="Book" id="BookBasicMap" >
<id property="bid" column="bid"/>
<result property="bname" column="bname"/>
</resultMap>
<resultMap type="Book" id="BookMap" extends="BookBasicMap">
<association property="user" javaType="User" resultMap="com.kgc.mybatis.pojo.UserMapper.UserBasicMap"/>
</resultMap>
<select id="getBooks" resultMap="BookMap">
select * from t_book t1 left join t_user t2 on t1.userId = t2.uid
</select>
注意这边是 对一 关联 用 javaType
<resultMap type="User" id="UserBasicMap">
<id property="uid" column="uid"/>
<result property="uname" column="uname" />
</resultMap>
》 扩展 : 多对多 关联
提供思路: 多对多 拆分开实质还是 一对多 ,就比如 多对一 实质是一对一 。 不过 处理多对多时需要 建立一个关联表
如图,我们已经在两个表之间创建了中介表,用来连接两个表,类似多对一再一对多 ,实现多对多。
这样我们只需要变通一下select语句 就可以了。
<select id="getPersonList" resultMap="PersonMap">
select * from t_person t1
left join t_person_group t2
on t1.pid = t2.personid
left join t_group t3
on t2.groupid = t3.gid
</select>