场景:员工表 和部门表的信息查询
-
部门和员工的关系,一个部门多个员工,一个员工属于一个部门
-
那我们可以采取两种方式来维护关系,一种在一的一方,一种在多的一方!
自定义映射规则,就得用resultMap处理
一对一:
1.按结果集嵌套,就像SQL中的联表查询
<resultMap id="employeeResult" type="cn.itnls.entity.Employee">
<id property="id" column="id"/>
<result property="name" column="ename"/>
<association property="dept" javaType="cn.itnls.entity.Dept">
<id property="id" column="did"/>
<result property="name" column="dname"/>
</association>
</resultMap>
<select id="findEmployeeById" resultMap="employeeResult">
select e.id eid, e.name ename,d.id did,d.name dname
from employee e left join dept d
on e.did=d.id
where e.id=#{id}
</select>
2.按查询嵌套,级联查询处理,就像SQL中的子查询
EmployeeMapper.xml:
<!-- 嵌套查询映射:-->
<resultMap id="employeeResult" type="cn.itnls.entity.Employee">
<!-- sql语句中没有别名就无需像上面那样加映射了-->
<association property="dept" javaType="cn.itnls.entity.Dept"
select="cn.itnls.mapper.DeptMapper.findDeptById" column="did">
</association>
</resultMap>
<select id="findEmployeeById" resultMap="employeeResult">
select id,name,did from employee where id=#{id}
</select>
DeptMapper.xml:
<mapper namespace="cn.itnls.mapper.DeptMapper">
<resultMap id="deptResult" type="cn.itnls.entity.Dept">
<result property="name" column="name1"/>
</resultMap>
<select id="findDeptById" resultMap="deptResult">
select id,name name1 from dept where id=#{id}
</select>
</mapper>
多对一:场景:查部门时,把其中所有员工查到:
1.结果集嵌套方式:
DeptMapper:
List<Dept> selectDepts();
xml:
<resultMap id="deptEmpResult" type="cn.itnls.entity.Dept">
<id property="id" column="did"/>
<result property="name" column="dname"/>
<collection property="employees" ofType="cn.itnls.entity.Employee">
<id property="id" column="eid"/>
<result property="name" column="ename"/>
</collection>
</resultMap>
<select id="selectDepts" resultMap="deptEmpResult">
select d.id did,d.name dname,e,id eid,e.name ename
from dept d
left join employee e on d.id=e.did
</select>
2.查询嵌套方式:
EmployeeMapper.xml:
<select id="getEmpByDId" resultType="cn.itnls.entity.Employee">
select id,name did from employee where did=#{id}
</select>
DeptMapper.xml:
<!--查询嵌套:-->
<resultMap id="deptEmpResult" type="cn.itnls.entity.Dept">
<collection property="employees" ofType="cn.itnls.entity.Employee"
column="id" select="cn.itnls.mapper.EmployeeMapper.getEmpByDId">
</collection>
</resultMap>
<select id="selectDepts" resultMap="deptEmpResult">
select id,name from dept
</select>