出现下列情况:
员工表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>