【Mybatis在collection调用其他mapper方法查询数据】

代码如下

	<resultMap id="userDeptRspResult" type="com.ruoyi.system.domain.DeptStreetRsp" extends="SysDeptResult">
		<!-- 
		childs:接收返回结果的对象中的属性名
		javaType:用于接受结果的集合的类型
		ofType:集合中泛型的类型
		select:要调用的mapper方法
		column:对应的本次返回结果中列的名称,会当成参数传到select中,此处相当于selectDeptByParentId(dept_id);
		 -->
		<collection property="childs" javaType="java.util.ArrayList" ofType="com.ruoyi.common.core.domain.entity.SysDept"
					select="com.ruoyi.system.mapper.SysDeptMapper.selectDeptByParentId" column="dept_id" />
	</resultMap>
	<!-- 查询父节点 -->
	<select id="findUserDept"  resultMap="userDeptRspResult" parameterType="string">
		<include refid="selectDeptVo"/>
		where dept_id = #{deptId}
		and `status` = '0'
		and del_flag='0'
	</select>
	<!-- 根据父id查询子节点 -->
	<select id="selectDeptByParentId" resultMap="SysDeptResult" parameterType="string">
		<include refid="selectDeptVo"/>
		where parent_id = #{pid}
		and `status` = '0'
		and del_flag='0'
	</select>

利弊分析

1、对于简单的sql而言,主要的时间消耗都在应用与数据库建立连接上,所以在写代码的时候要尽量考虑到建立网络连接消耗的时间,能一次查回来的情况下,就不要用java遍历查询。
2、就上述的mybatis写法而言,对于资源的节省并没有提升,基本上和使用java遍历调用是一样的,因为mybatis在查询的时候,查询父节点与查询子节点仍是相互独立的,仍是需要与数据库建立两次连接,只是代码编写上简单了些,方便简洁了些。
3、针对于需要查询父子节点这种需要关联节点的情况下,可以考虑使用collection的另一种写法,使用id标签作为父节点,result为子节点接受,这样便可以一次连接下,将结果都查询回来以后,再根据id和result解析到java对象中,节省了建立连接的时间。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值