mybatis collection 子对象 list 为空 对象 问题定位

本文探讨了在MyBatis中遇到集合属性查询返回为空的问题,特别是对象内的List字段。通过分析问题场景,参考相关文章,并未深入源码,而是直接通过SQL工具执行查询语句来定位问题。问题源于SQL字段存在别名导致映射规则不匹配。解决方案在于调整MyBatis的配置,确保字段匹配规则正确,以避免list为空的错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、问题场景:

  mybatis使用collection查询集合属性:即实现一个对象里面挂在一个list,通过一个sql语句或者通过嵌套子查询的方式查询得到数据。

 不熟悉的请查阅  https://www.cnblogs.com/heliusKing/p/11173362.html

2、使用参考

https://blog.youkuaiyun.com/lzxomg/article/details/89739651 的第二个方法。但是出现了问题:

 对应的  options 为空list。

3、问题原因:

 本次分析,没有定位源码,一个一个的去debug,而是直接拿出来eclipse执行sql之后的语句在sql工具上执行,根据经验解决问题。

3.1 mybtis配置

<resultMap id="BaseResultMap" type="com.xxx.modules.xxx.entity.Question" >
		<id column="id" 		 property="id"      jdbcType="VARCHAR" />
		<result column="content" property="content" jdbcType="VARCHAR" />
		<result column="type"    property="type"    jdbcType="VARCHAR" />
		<result column="sort"    property="sort"    jdbcType="INTEGER" />
		<collection property="options" javaType="java.util.ArrayList" ofType="com.xxx.modules.data.entity.QuestionOption">
			<id column="o.id" property="id" jdbcType="VARCHAR" />
			<result column="o.content" property="content" jdbcType="VARCHAR" />
			<result column="o.sort" property="sort" jdbcType="INTEGER" />
		</collection>
	</resultMap>

3.2 问题定位或者分析

通过在sql工具上执行,得到最终的sql字段存在别名,即字段名拼接1的情况。故配置属性和字段匹配的时候,不符合映射规则,所以list为空。

解决之前

解决之后

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值