zoukankan      html  css  js  c++  java
  • 11.延迟加载

    延迟加载

      MyBatis 中的延迟加载,也称为懒加载,是指在进行关联查询时,按照设置延迟规则推 迟对关联对象的 select 查询。延迟加载可以有效的减少数据库压力。 

    需要注意的是,MyBatis 的延迟加载只是对关联对象的查询有迟延设置,对于主加载对象都是直接执行查询语句的。

      

      关联对象加载时机

    MyBatis 根据对关联对象查询的 select 语句的执行时机,分为三种类型:直接加载、侵 入式延迟加载与深度延迟加载。

        1.直接加载:执行完对主加载对象的select语句,马上执行对关联对象的select查询

        2.侵入式延迟加载:执行完主加载对象的查询时,不会马上执行对关联对象。但当要访问主加载对象的详情时,

        就会马上执行关联对象的select查询。即对关联对象的查询执行,侵入到了主加载对象的详情中

        即将关联对象的详情作为主加载对象详情的一部分出现了

        3.深度延迟加载:执行对主加载对象的查询时,不会执行对关联对象的查询。访问主加载对象 的详情时也不会执行关联对象的 select 查询。

        只有当真正访问关联对象的详情时,才会 执行对关联对象的 select 查询

     

    需要注意的是,延迟加载的应用要求,关联对象的查询与主加载对象的查询必须是分别 进行的 select 语句,

    不能是使用多表连接所进行的 select 查询。因为,多表连接查询,其实 质是对一张表的查询,

    对由多个表连接后形成的一张表的查询。会一次性将多张表的所有信 息查询出来。

    MyBatis 中对于延迟加载设置,可以应用到一对一、一对多、多对一、多对多的所有关 联关系查询中

     

     1 <!-- 三种加载方式:1.直接加载  2.侵入延迟加载   3.深度延迟加载  其中深度延迟加载最 lazy, 其次 是侵入延迟加载-->
     2     <settings>
     3         <!-- 延迟加载总开关-->
     4         <!-- 默认为false,不采用延迟加载,即采用直接加载 -->
     5         <!-- 直接加载:执行完主加载对象的 select 语句,马上执行关联对象的 select 语句 -->
     6         <!-- 因为侵入延迟加载 默认不开启,所以当开启延迟加载后,采用的 深度延迟加载(即用到了才去加载,发出SQL,在 hibernate 中是load方法 和 fetchType ,都是类似这种深度延迟加载 ) -->
     7         <setting name="lazyLoadingEnabled" value="true" />
     8         
     9         <!-- 侵入延迟加载的开关 默认为false,开启后,即采用侵入延迟加载 -->
    10         <!-- 侵入延迟加载:该延迟策略使关联对象的数据侵入到了主加载对象的数据中,当主加载对象的数据被调用时,关联对象 随之被调用 ,即当对象中属性被使用后,就要发出SQL语句去加载关联对象-->
    11         
    12         <setting name="aggressiveLazyLoading" value="true"/>
    13     </settings>

      延迟加载策略总结

  • 相关阅读:
    Java实现 LeetCode 132 分割回文串 II(二)
    Java实现 蓝桥杯 算法提高 宰羊
    Java实现 蓝桥杯 算法提高 宰羊
    Java实现 蓝桥杯 算法提高 宰羊
    Java实现 蓝桥杯 算法提高 秘密行动
    Java实现 蓝桥杯 算法提高 秘密行动
    在VC下显示JPEG、GIF格式图像的一种简便方法
    vc 基于对话框多线程编程实例——线程之间的通信
    VC/MFC 编程技巧大总结
    VC 获取指定文件夹路径的方法小结
  • 原文地址:https://www.cnblogs.com/xuzekun/p/7424196.html
Copyright © 2011-2022 走看看