MyBatis使用ResultMap处理一对多多对一

出现下列情况:
员工表Emp和部门表Dept是多对一的关系,员工实体类中有Dept这个属性,
但是多表连接查询的时候只能查出Dept这张表的did和dname,无法和Dept这个属性进行关联,
此时若要查出员工信息表,那么Dept这个属性会是null.
因此需要建立映射关系

方法一:连表查询

<!-- 列名和属性名一一对应 -->

<resultMap type="Emp" id="map1">
	<id column="eid" property="eid"/>
	<result column="ename" property="ename"/>
	<result column="age" property="age"/>
	<result column="gender" property="gender"/>
	
	<!-- 创建Dept对象后,赋值给Emp类中的dept属性 -->
	<association javaType="Dept" property="dept" >
		<id column="did" property="did"/>
		<result column="dname" property="dname"/>		
	</association>
</resultMap>

<select id="getAllEmpWithDept" resultMap="map1">
	select eid,ename,age,gender,did,dname from Emp e left join Dept d on e.did=d.did   
</select>

方法二:分步查询
①先通过eid查询到ename,age,gender,did字段
②通过查询出来的did字段,再查询出Dept表中的dname


	<resultMap type="Emp" id="map2">
		<id column="eid" property="eid"/>
		<result column="ename" property="ename"/>
		<result column="age" property="age"/>
		<result column="gender" property="gender"/>
			
			<!-- 
				将getAllEmp的查询结果did赋值到getDeptByDid中 
				column:作为分步查询的字段名
			-->
			
		<association property="dept" select="getDeptByDid" column="did">
			
		</association>
	
	</resultMap>
	
	<select id="getAllEmp" resultType="map2">
		select ename,age,gender,did from emp where eid=#{eid}
	</select>
	
	<select id="getDeptByDid" resultType="dept">
		select did,dname from dept where dept=#{did}
	</select>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值