• 一对多映射处理


    8.3.1 、collection

    /**
    * 根据部门id查新部门以及部门中的员工信息
    * @param did
    * @return
    */
    Dept getDeptEmpByDid(@Param("did") int did);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    <resultMap id="deptEmpMap" type="Dept">
    <id property="did" column="did"></id>
    <result property="dname" column="dname"></result>
    <!--
    ofType:设置collection标签所处理的集合属性中存储数据的类型
    -->
    <collection property="emps"ofType="Emp">
    <id property="eid" column="eid"></id>
    <result property="ename" column="ename"></result>
    <result property="age"column="age"></result>
    <result property="sex"column="sex"></result>
    </collection>
    </resultMap>
    <!--Dept getDeptEmpByDid(@Param("did") int did);-->
    <select id="getDeptEmpByDid" resultMap="deptEmpMap">
    select dept.*,emp.* from t_dept dept left join t_emp emp on dept.did =
    emp.did where dept.did = #{did}
    </select>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    实验测试:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    测试类:
    在这里插入图片描述
    测试结果:
    在这里插入图片描述

    8.3.2 、分步查询
    ①查询部门信息

    /**
    * 分步查询部门和部门中的员工
    * @param did
    * @return
    */
    Dept getDeptByStep(@Param("did") int did);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    <resultMap id="deptEmpStep" type="Dept">
    <id property="did" column="did"></id>
    <result property="dname" column="dname"></result>
    <collection property="emps" fetchType="eager"
    select="com.softeem.MyBatis.mapper.EmpMapper.getEmpListByDid" column="did">
    </collection>
    </resultMap>
    <!--Dept getDeptByStep(@Param("did") int did);-->
    <select id="getDeptByStep" resultMap="deptEmpStep">
    select * from t_dept where did = #{did}
    </select>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    ②根据部门id查询部门中的所有员工

    /**
    * 根据部门id查询员工信息
    * @param did
    * @return
    */
    List<Emp> getEmpListByDid(@Param("did") int did);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    <!--List<Emp> getEmpListByDid(@Param("did") int did);-->
    <select id="getEmpListByDid" resultType="Emp">
    select * from t_emp where did = #{did}
    </select>
    
    • 1
    • 2
    • 3
    • 4

    实验成测试:
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    测试结果:
    在这里插入图片描述

    总结:
    分步查询的优点:可以实现延迟加载
    但是必须在核心配置文件中设置全局配置信息:
    lazyLoadingEnabled:延迟加载的全局开关。当开启时,所有关联对象都会延迟加载
    aggressiveLazyLoading:当开启时,任何方法的调用都会加载该对象的所有属性。否则,每个属
    性会按需加载
    此时就可以实现按需加载,获取的数据是什么,就只会执行相应的sql。此时可通过association和
    collection中的fetchType属性设置当前的分步查询是否使用延迟加载, fetchType=“lazy(延迟加
    载)|eager(立即加载)”

  • 相关阅读:
    unordered_set和unordered_map的使用【STL】
    459. 重复的子字符串(力扣LeetCode)
    【前端之旅】Web前端发展简史
    Spring Boot整合canal实现数据一致性解决方案解析-部署+实战
    使用scipy库将离散点连续化
    监听el-table滚动
    从MySQL架构看一条SQL语句是如何执行的?
    轻舟程序创建的centos7.x磁盘合并到根的操作方法
    分期付款中的利率问题
    品牌平面设计如何让自己有脑洞大开的创意 优漫动游
  • 原文地址:https://blog.csdn.net/weixin_45459209/article/details/133016965