1. 方式一 collection属性
把部门字段放到部门的所对应的属性中,把当前所对应员工的信息先放在员工对象中,在放在集合属性中
①实体类
public class Dept {
private Integer deptId;
private String deptName;
private List<Emp> emps;
.....
}
②接口方法
// 查询部门以及部门中的员工信息
Dept getDeptAndEmpByDeptId(@Param("deptId") Integer deptId);
③映射文件
<!-- collection:处理一对多的映射关系()(处理集合类型的属性)-->
<resultMap id="deptAndEmpResultMap" type="Dept">
<id column="dept_id" property="deptId"></id>
<result column="dept_name" property="deptName"></result>
<!--ofType:设置集合类型的属性中存储的数据类型-->
<collection property="emps" ofType="Emp">
<id column="emp_id" property="empId"></id>
<result column="emp_name" property="empName"></result>
<result column="age" property="age"></result>
<result column="gender" property="gender"></result>
</collection>
</resultMap>
<!-- Dept getDeptAndEmpByDeptId(@Param("deptId") Integer deptId);-->
<select id="getDeptAndEmpByDeptId" resultMap="deptAndEmpResultMap">
select * from t_dept left join t_emp on t_dept.dept_id=t_emp.dept_id where t_dept.dept_id=#{deptId};
</select>
④测试类
@Test
public void testGetDeptAndEmpByDeptId(){
SqlSession session = SqlSessionUtil.getSession();
DeptMapper mapper = session.getMapper(DeptMapper.class);
Dept deptAndEmpByDeptId = mapper.getDeptAndEmpByDeptId(1);
System.out.println(deptAndEmpByDeptId);
}
2. 方式二 分步查询
①Dept的接口方法
// 通过分步查询部门以及部门中的员工信息的第一步
Dept getDeptAndEmpByStepOne(@Param("deptId") Integer deptId);
映射文件
<!--select结果来为property属性赋值的-->
<!-- 先把部门查询出来,在以部门的deptId作为条件去员工表里面查询部门中的员工 所以column的值应该是dept_id -->
<resultMap id="deptAndEmpResultMapByStep" type="Dept">
<id column="dept_id" property="deptId"></id>
<result column="dept_Name" property="deptName"></result>
<collection property="emps" select="com.atguigu.mybatis.mapper.EmpMapper.getDeptAndEmpByStepTwo" column="dept_id"></collection>
</resultMap>
<!-- Dept getDeptAndEmpByStepOne(@Param("deptId") Integer deptId); -->
<select id="getDeptAndEmpByStepOne" resultMap="deptAndEmpResultMapByStep">
select * from t_dept where dept_id=#{deptId}
</select>
② Emp的接口方法
// 通过分步查询部门以及部门中的员工信息的第二步
List<Emp> getDeptAndEmpByStepTwo(@Param("deptId") Integer deptId);
映射文件
<!-- List<Emp> getDeptAndEmpByStepTwo(@Param("deptId") Integer deptId); -->
<select id="getDeptAndEmpByStepTwo" resultType="Emp">
select * from t_emp where dept_id = #{deptId}
</select>
③测试类
@Test
public void testGetDeptAndEmpByDeptStep(){
SqlSession session = SqlSessionUtil.getSession();
DeptMapper mapper = session.getMapper(DeptMapper.class);
Dept deptAndEmpByDeptId = mapper.getDeptAndEmpByStepOne(1);
System.out.println(deptAndEmpByDeptId);
}