mybatis 表与表 关联查询 (二)

Mapper
@Mapper
public interface EmpMapper {

    /**
     * 查询所有的职工信息
     */
    List<Emp> getAllEmp();

    /**
     * 查询职工及职工所对应的部门信息
     */
    Emp getEmpAndDept(@Param("eid") Integer eid);

    /**
     * 分步查询查询职工及职工所对应的部门信息
     * 分步查询第一步:查询职工信息
     */
    Emp getEmpAndDeptByOne(@Param("eid") Integer eid);

    /**
     * 分步查询查询部门及部门中所有的职工信息
     * 分步查询第二步:根据did查询职工信息
     */
    List<Emp> getDeptAndEmpByTwo(@Param("did") Integer did);


}

Mybatis

   <!--
        resultMap:设置自定义映射关系
        id:唯一标识,不能重复
        type:设置映射关系中的实体类类型
        子标签:
        id:设置主键的映射关系
        result:设置普通字段的映射关系
        属性:
        property:设置映射关系中的属性名,必须是type属性所设置的实体类类型中的属性名
        column:设置映射关系中的字段名,必须是sql语句查询出的字段名
    -->
    <resultMap id="empResultMap" type="com.example.bootdemo.pojo.Emp">
        <id property="eid" column="eid"></id>
        <result property="empName" column="emp_name"></result>
        <result property="age" column="age"></result>
        <result property="sex" column="sex"></result>
        <result property="email" column="email"></result>
    </resultMap>

    <select id="getAllEmp" resultMap="empResultMap">
        select * from m_emp
    </select>

    <!--处理多对一映射关系方式一:级联属性赋值-->
    <resultMap id="empAndDeptResultMapOne" type="com.example.bootdemo.pojo.Emp">
        <id property="eid" column="eid"></id>
        <result property="empName" column="emp_name"></result>
        <result property="age" column="age"></result>
        <result property="sex" column="sex"></result>
        <result property="email" column="email"></result>
        <result property="dept.did" column="did"></result>
        <result property="dept.deptName" column="dept_name"></result>
    </resultMap>
    <!--处理多对一映射关系方式二:association-->
    <resultMap id="empAndDeptResultMapTwo" type="com.example.bootdemo.pojo.Emp">
        <id property="eid" column="eid"></id>
        <result property="empName" column="emp_name"></result>
        <result property="age" column="age"></result>
        <result property="sex" column="sex"></result>
        <result property="email" column="email"></result>
        <!--
            association:处理多对一的映射关系
            property:需要处理多对的映射关系的属性名
            javaType:该属性的类型
        -->
        <association property="dept" javaType="com.example.bootdemo.pojo.Dept">
            <id property="did" column="did"></id>
            <result property="deptName" column="dept_name"></result>
        </association>
    </resultMap>
    <select id="getEmpAndDept" resultMap="empAndDeptResultMapTwo">
        select * from m_emp left join m_dept on m_emp.did = m_dept .did where m_emp.eid = #{eid}
    </select>

    <resultMap id="empAndDeptByStepResultMap" type="com.example.bootdemo.pojo.Emp">
        <id property="eid" column="eid"></id>
        <result property="empName" column="emp_name"></result>
        <result property="age" column="age"></result>
        <result property="sex" column="sex"></result>
        <result property="email" column="email"></result>
        <!--
            select:设置分步查询的sql的唯一标识(namespace.SQLId或mapper接口的全类名.方法名)
            column:设置分布查询的条件
            fetchType:当开启了全局的延迟加载之后,可通过此属性手动控制延迟加载的效果
            fetchType="lazy|eager":lazy表示延迟加载,eager表示立即加载
        -->
        <association property="com.example.bootdemo.pojo.Dept"
                     select="com.example.bootdemo.mapper.DeptMapper.getEmpAndDeptByStepTwo"
                     column="did"
                     fetchType="eager"></association>
    </resultMap>
    <select id="getEmpAndDeptByOne" resultMap="empAndDeptByStepResultMap">
        select * from m_emp where eid = #{eid}
    </select>

    <select id="getAllEmpOld" resultType="com.example.bootdemo.pojo.Emp">

        select * from m_emp
    </select>

    <select id="getDeptAndEmpByTwo" resultType="com.example.bootdemo.pojo.Emp">
        select * from m_emp where did = #{did}
    </select>

 

posted @ 2022-07-21 08:46    阅读(67)  评论(0编辑  收藏  举报