mybatis处理对象关联

》第一步:首先我们先建立两个表,用来展示一对多关联,以及多对一关联(实际解决起来就是一对一关联解决)

 》第二步:创建对应的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>

猜你喜欢

转载自blog.csdn.net/qq_41902618/article/details/81448132