Mybatis一对多关联查询,返回结果集list中嵌套list实例(collection实现)

本文详细介绍了如何在MyBatis中使用集合属性映射,通过具体示例展示了如何将查询结果映射到Java对象的集合属性上,解决了在查询包含列表属性的对象时的常见问题。
  1. 问题

最近在开发web(持久层框架用的是mybatis)时遇到一个小问题 : 需要查询对象列表返回到页面,每一个对象中有一个属性是list,我需要获取这个list中的值显示在页面上。

  1. 解决方案

使用collection解决,因为在开发中遇到一些小坑,所以在这总结举例,避免以后再犯。

商户pojo

public class MercPojo{
	private Long id;
	private String mercNum;//商户编号
	private String mercName;//商户全称
	private List<MercSettlePojo> mercSettleList;//商户结算信息
	...
}

商户结算信息pojo

public class MercSettlePojo{
	private Long id;
	private Long merc_id;//商户的id,对应MercPojo的id
	private String settleName;//结算账户名称
	...
}

Mapper文件 Merc.xml

<select id="selectListByMercId" resultType="...MercSettlePojo">
		<![CDATA[
			select
				t.id,
				t.settle_name as settleName <!-- 注意一定要让别名与pojo中的属性一致 -->
			from Settle t
		]]>
		<where>
			merc_id = #{merc_id}
		</where>
	</select>

	<select id="selectMerchantList" parameterType="...MercPojo" resultMap="baseResultMap">
		<![CDATA[
			select m.id,m.merc_num,m.merc_name
			...
			from Merchant m
		]]>
		<where>
			 <if test="mercNum != null and mercNum != ''"><![CDATA[and m.merc_num LIKE '%'||#{mercNum}||'%']]></if>		
			 <if test="mercName != null and mercName != ''"><![CDATA[and m.merc_name LIKE '%'||#{mercName}||'%']]></if>	 
			 ...
		</where>
	</select>

	<resultMap id="baseResultMap" type="...MercPojo">
		<result column="id" property="id" />
		<result column="merc_num" property="mercNum" />
		<result column="merc_name" property="mercName" />
		...
		<!-- 下面这句很重要:作用就是通过selectListByMercId查出list然后映射到属性mercSettleList中。其中,ofType为list的泛型,column为子select的入参(这里是id),select为子查询的mapperId-->
		<collection property="mercSettleList" ofType="...MercSettlePojo" column="{merc_id=id}" select="selectListByMercId"/>
	</resultMap>

sql执行顺序为:先执行selectMerchantList,然后再执行selectListByMercId。
  
原文参考:https://blog.youkuaiyun.com/u012415035/article/details/97363965

参考 1:https://blog.youkuaiyun.com/qing_gee/article/details/79214721

参考 2:https://www.cnblogs.com/canger/p/9997422.html

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值