MyBatis:多对一映射处理

查询员工信息以及员工所对应的部门信息

public class Emp {  
	private Integer eid;  
	private String empName;  
	private Integer age;  
	private String sex;  
	private String email;  
	private Dept dept;
	//...构造器、get、set方法等
}

 1.级联方式处理映射关系

    /**
     * 根据员工id查询
     */
    Emp getEmpById(@Param("id") int id);
    <resultMap id="empResultMapone" type="Emp">
        <id property="empId" column="emp_id"></id>
        <result property="empName" column="emp_name"></result>
        <result property="password" column="password"></result>
        <result property="email" column="email"></result>
        <result property="dept.deptId" column="dept_id"></result>
        <result property="dept.deptName" column="dept_name"></result>
    </resultMap>
    <!--Emp getEmpById(int id);-->
    <select id="getEmpById" resultMap="empResultMapone">
        select * from t_emp left join t_dept on t_emp.dept_id = t_dept.dept_id where t_emp.emp_id = #{id}
    </select>

 2.通过association解决多对一的映射关系

    <resultMap id="empResultMaptwo" type="Emp">
        <id property="empId" column="emp_id"></id>
        <result property="empName" column="emp_name"></result>
        <result property="password" column="password"></result>
        <result property="email" column="email"></result>
        <!--
           association:处理多对一的映射关系
           property:需要处理多对的映射关系的属性名
           javaType:该属性的类型
        -->
        <association property="dept" javaType="Dept">
            <id property="deptId" column="dept_id"></id>
            <result property="deptName" column="dept_name"></result>
        </association>

    </resultMap>
    <!--Emp getEmpById(int id);-->
    <select id="getEmpById" resultMap="empResultMaptwo">
        select * from t_emp left join t_dept on t_emp.dept_id = t_dept.dept_id where t_emp.emp_id = #{id}
    </select>

 3.通过分步查询解决多对一的映射关系

第一步:查询员工的信息

/**
 * 通过分步查询,查询部门及对应的所有员工信息
 * 分步查询第一步:查询部门信息
 */
Emp getEmpAndDeptByStepOne(@Param("id") int id);

 

    <resultMap id="getEmpAndDeptByStepOne" type="Emp">
        <id property="empId" column="emp_id"></id>
        <result property="empName" column="emp_name"></result>
        <result property="password" column="password"></result>
        <result property="email" column="email"></result>
        <association property="dept"
                     select="com.tinstu.mybatis.mapper.DeptMapper.getEmpAndDeptByStepTwo"
                     column="dept_id"></association>
    </resultMap>

    <!-- Emp getEmpAndDeptByStepOne(@Param("id") int id);-->
    <select id="getEmpAndDeptByStepOne" resultMap="getEmpAndDeptByStepOne">
        select * from t_emp where emp_id = #{id}
    </select>

 

第二步:查询部门的信息

/**
 * 通过分步查询,查询部门及对应的所有员工信息
 * 分步查询第二步:根据部门id查询部门中的所有员工
 */
Dept getEmpAndDeptByStepTwo(@Param("ept_id") int ept_id);

 

    <resultMap id="getEmpAndDeptByStepTwo" type="Dept">
        <id property="deptId" column="dept_id"></id>
        <result property="deptName" column="depr_name"></result>
    </resultMap>
   <!-- Dept getEmpAndDeptByStepTwo(@Param("id") int id); -->
    <select id="getEmpAndDeptByStepTwo" resultMap="getEmpAndDeptByStepTwo">
        select * from t_dept where dept_id = #{dept_id}
    </select>

 

 

 

 

阅读剩余
THE END