Mybatis 一对一关联查询的两种方式:嵌套结果与嵌套查询

嵌套结果

Mapper 接口

List<TUser> selectUserPosition1();

Mapper xml文件

<resultMap id="BaseResultMap" type="TUser">
	<id column="id" property="id" />
	<result column="user_name" property="userName" />
	<result column="real_name" property="realName" />
	<result column="sex" property="sex" />
	<result column="mobile" property="mobile" />
	<result column="email" property="email" />
	<result column="note" property="note" />
</resultMap>
<resultMap id="userAndPosition1" extends="BaseResultMap" type="TUser">
	<association property="position" javaType="TPosition" columnPrefix="post_">
		<id column="id" property="id"/>
		<result column="name" property="postName"/>
		<result column="note" property="note"/>
	</association>
</resultMap>
<select id="selectUserPosition1" resultMap="userAndPosition1" >
	select
	    a.id, 
	    user_name,
		real_name,
		sex,
		mobile,
		email,
		a.note,
		b.id post_id,
		b.post_name,
		b.note post_note
	from t_user a,
		t_position b
	where a.position_id = b.id
</select>

t_user 表里有 position_id 字段

TUser 对象

@Data
public class TUser{
	
    private Integer id;

    private String userName;

    private String realName;

    private Byte sex;

    private String mobile;

    private String email;

    private String note;
	//持有了一个TPosition 
    private TPosition position;
}

使用

List<TUser> list1 = mapper.selectUserPosition1();
for (TUser tUser : list1) {
	System.out.println(tUser);
}

嵌套查询

Mapper 接口

List<TUser> selectUserPosition2();

Mapper xml文件

<select id="selectUserPosition2" resultMap="userAndPosition2" >
	select
	a.id,
	a.userName,
	a.realName,
	a.sex,
	a.mobile,
	a.position_id
	from t_user a
</select>
<resultMap id="userAndPosition2" extends="BaseResultMap" type="TUser">
	<association property="position" fetchType="lazy"  column="position_id" select="com.enjoylearning.mybatis.mapper.TPositionMapper.selectByPrimaryKey" />
</resultMap>

使用

//因为配置了 fetchType="lazy" 不会调用 association 里面的方法 
List<TUser> list2 = mapper.selectUserPosition2();
for (TUser tUser : list2) {
					//具体需要了才会调嵌套的查询,如果有缓存只会调用2次
	System.out.println(tUser.getPosition());
}

这种方式会把所有的 TUser 查出来,t_user 有多少条,就会查出多少条

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值