MyBatis3系列__06查询的几点补充
关于查询的一点补充:
当查询部门信息时,希望查询该部门下的所有员工,下面会采取两种方式实现:
1.联合查询
public Department getDeptWithEmpById(Integer id);
对应的xml文件中新增:
<resultMap id="myDept" type="com.mybatis.learn.bean.Department">
<id column="dept_id" property="deptId"/>
<result column="dept_name" property="deptName"/>
<!--
collection定义关联集合类型的属性的封装规则
ofType:指定集合里面元素的类型
-->
<collection property="emps" ofType="com.mybatis.learn.bean.Employee">
<id column="eid" property="id"/>
<result column="last_name" property="lastName"/>
<result column="gender" property="gender"/>
<result column="email" property="email"/>
</collection>
</resultMap>
<select id="getDeptWithEmpById" resultMap="myDept">
SELECT d.dept_id, d.dept_name dept_name, e.id eid, e.last_name last_name,
e.email email,e.gender gender, e.dept_id
FROM tbl_dept d
LEFT JOIN tbl_employee e
ON d.dept_id=e.dept_id
WHERE d.dept_id=#{deptId}
</select>
2.分步查询
可以按照上一篇的模式,还是在有需要的时候去查询部门包含的员工信息,具体做法如下:
在EmployeeMapper中新增对应的方法:
public List<Employee> getEmpsByDeptId(Integer deptId);
xml文件中相应的更改:
<select id="getEmpsByDeptId" resultType="com.mybatis.learn.bean.Employee">
select * from tbl_employee where dept_id=#{deptId}
</select>
在DepartmentMapper中添加查询部门信息的方法:
public Department getDeptStepByDeptId(Integer deptId);
在对应的xml文件中添加以下内容:
<resultMap id="myDept2" type="com.mybatis.learn.bean.Department">
<id column="dept_id" property="deptId"/>
<result column="dept_name" property="deptName"/>
<collection property="emps"
select="com.mybatis.learn.dao.EmployeeMapper.getEmpsByDeptId"
column="{deptId=dept_id}" fetchType="lazy">
</collection>
</resultMap>
<select id="getDeptStepByDeptId" resultMap="myDept2">
select dept_id, dept_name from tbl_dept where dept_id=#{deptId}
</select>