mybatis中<collection>子查询不执行

1,025 阅读1分钟

今天使用mybatis中标签进行子查询时,发现子查询一直没有执行,网上搜了各种方式,都没有方式解决

校验了无数次的调用配置,仍然没有解决

举个例子: 查询一个home下的房间数

<resultMap .............>
<result column="_name" property="name" />
.
.
.
<collection property="rooms"  select="selectRooms" column="{homeId= homeId}" / >
</resultMap>

其中主要的参数就说这三个: 1、property:属性,就是该列表在对象中对应的属性名称 2、column:子查询需要传递的参数 3、select:子查询(该mapper下的方法)方法id,也可以跨dao层文件,只不过需要添加:namespace eg:

<resultMap .............>
<result column="_name" property="name" />
. . .
. . .
. . .
<collection property="rooms"  select="com.test.roomDao.selectRooms" column="{homeId= homeId}" / >
</resultMap>

其中select参数就变成了:com.test.roomDao.selectRooms 前面加了dao文件的地址

注意: 到了我遇到的坑了,我以为在父查询传过homeId就可以在子查询里column里直接用,

事实上不是这样的,需要父查询里返回这个参数,才能在子查询里使用 即:子查询的输入参数,必须是父查询SQL返回参数里面的同名参数

eg:子查询需要:homeId
 父查询就要: select id as homeId , name, .... from home 
 //返回参数里要有homeId,你才能使用

还有一种情况:父查询结果为空,子查询也不会执行,这个我没有测试,网上搜出来结果,仅供参考

本篇博文仅用于自己记录使用,可能因为依赖版本or个人局限性问题,存在错误,希望互相指正,互相学习,轻喷