• MyBatis association解决多对一和collection解决一对多的映射关系


    多对一的映射关系

    创建Emp和Dept类

    1.处理多对一映射关系方式一:级联属性赋值

    2.处理多对一映射关系方式二:association实现

    • association:处理多对一的映射关系

    • property:需要处理多对的映射关系的属性名

    • javaType:该属性的类型

    3.处理多对一映射关系方式三:分步查询

    EmpMapper 接口中方法

      /**
         * 通过分步查询查询员工以及员工对应的部门信息
         * 分布查询第一步:查询员工信息
         */
        Emp getEmpAndDeptByStepOne(@Param("eid") Integer eid);
    
    • 1
    • 2
    • 3
    • 4
    • 5

    DeptMapper 接口中方法

     /**
         * 通过分步查询查询员工以及员工对应的部门信息
         * 分布查询第二步:通过did查询员工所对应的部门
         */
        Dept getEmpAndDeptByStepTwo(@Param("did") Integer did);
    
    • 1
    • 2
    • 3
    • 4
    • 5

    EmpMappe.xml

    • select:设置分步查询的SQL的sql的唯一标识(namespace.SQLId或mapper接口的全类名.方法名)

    • column:设置分布查询的条件

    DeptMapper.xml

    测试

    分步查询的优点:可以实现延迟加载,但是必须在核心配置文件中设置全局配置信息:

    lazyLoadingEnabled:延迟加载的全局开关。当开启时,所有关联对象都会延迟加载

    aggressiveLazyLoading:当开启时,任何方法的调用都会加载该对象的所有属性。否则,每个属性会按需加载

    此时就可以实现按需加载,获取的数据是什么,就只会执行相应的sql。

    此时可通过association和collection中的fetchType属性设置当前的分步查询是否使用延迟加载,fetchType=“lazy(延迟加载)|eager(立即加载)”

    fetchType:当开启了延迟加载后,可通过此属性手动控制延迟加载的效果

    mybatis-config.xml 配置延迟加载

        <settings>
            <setting name="mapUnderscoreToCamelCase" value="true"/>
            
            <setting name="lazyLoadingEnabled" value="true"/>
        settings>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    测试,查询员工信息

    当关闭mybatis-config.xml 配置延迟加载

     
    
    • 1

    测试,查询员工信息,查询为员工信息以及员工所在部门

    二、一对多映射关系

    1.通过collection一对多映射关系

    DeptMapper 接口中方法

      /**
         * 获取部门以及部门中所有的员工信息
         */
        Dept getDeptAndEmp(@Param("did") Integer did);
    
    • 1
    • 2
    • 3
    • 4

    DeptMapper.xml

    • collection:处理一对多的映射关系

    • ofType:表示该属性所对应的集合中存储数据的类型

    测试

    2.通过分步查询处理一对多映射关系

    DeptMapper 接口中方法

        /**
         * 通过分步查询部门以及部门中所有的员工信息
         * 分步查询第一步:查询部门信息
         */
        Dept getDeptAndByStepOne(@Param("did") Integer did);
    
    • 1
    • 2
    • 3
    • 4
    • 5

    DeptMapper.xml

    EmpMapper 接口中方法

        /**
         * 通过分步查询部门以及部门中所有的员工信息
         * 分步查询第二步:根据部门id查询员工信息
         */
        List getDeptAndEmpStepTwo(@Param("did") Integer did);
    
    • 1
    • 2
    • 3
    • 4
    • 5

    EmpMapper.xml

    测试

  • 相关阅读:
    阅读论文的方法和技巧(快速且有效)
    cosarctanx的求法
    离线Linux服务器上使用docker-pytorch在gpu运行踩坑与解决办法
    javascript中的继承
    大数据工程师岗位职责描述
    Reading Note(7)——AutoDSE
    Semantic Kernel入门系列:利用YAML定义prompts functions
    【笔记】原油阳谋论
    Bootstrap页面整合(十二)
    AUTOSAR CAN主动与被动唤醒分析
  • 原文地址:https://blog.csdn.net/weixin_46665411/article/details/128051456