Mybatis的一对多
部门 -> 员工 : 一对多
1、POJO
public class Department {
private Integer dId;
private String dName;
private List<Employee> employeeList;
public class Employee {
private Integer empId;
private String name;
private Integer gender;
private Integer age;
private Department dept;
class EmpDeptMapper{
Department getDeptEmpbyId(String id);
}
2、XML-resultMap方式
<!-- Department getDeptEmpbyId(String id); -->
<resultMap id="deptMap" type="Department">
<id column="did" property="dId"/>
<result column="dname" property="dName"/>
<!-- 这里的ofType是不能改成javaType的-->
<collection property="employeeList" ofType="Employee">
<id column="empid" property="empId"/>
<result column="name" property="name"/>
<result column="gender" property="gender"/>
<result column="age" property="age"/>
</collection>
</resultMap>
<select id="getDeptEmpbyId" resultMap="deptMap">
select d.did ,d.dname ,e.empid ,e.name,e.gender ,e.age from department d left join hr_emp e on d.did = e.deptid where did = #{id}
</select>
3、分布查询一对多
思路-需要2个方法:
1.需要根据deptId 查询出 一个部门
2.还需要通过部门id查出多个emp
<!--一对多分布查询-->
<!-- Department getOnlyDeptById(String id) 这是最终的标签,这里需要用到resultMap;-->
<select id="getOnlyDeptById" resultMap="deptEmpStep">
select did,dname from department where did = #{id}
</select>
<resultMap id="deptEmpStep" type="Department">
<id column="did" property="dId"/>
<result column="dname" property="dName"/>
<collection property="employeeList" select="getEmpsByDeptId" column="did = did" fetchType="lazy">
<!-- <id column="empid" property="empId"/>-->
<!-- <result column="name" property="name"/>-->
<!-- <result column="gender" property="gender"/>-->
<!-- <result column="age" property="age"/>-->
</collection>
</resultMap>
<!-- List<Employee> getEmpsByDeptId(String did) 这是被调用的标签;-->
<select id="getEmpsByDeptId" resultType="Employee">
select empid ,name ,gender ,age,deptid from hr_emp where deptid = #{did}
</select>
4、一对多延迟加载
<collection property="employeeList" select="getEmpsByDeptId" column="did = did" fetchType="lazy">
fetchType = "eager"|"lazy" 单独指定某个分布查询的延迟加载