Mybatis一对多自定义映射

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" 单独指定某个分布查询的延迟加载  
发布了85 篇原创文章 · 获赞 5 · 访问量 5894

猜你喜欢

转载自blog.csdn.net/shufangreal/article/details/105348281