今天使用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个人局限性问题,存在错误,希望互相指正,互相学习,轻喷