• 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>

      延迟加载策略总结

  • 相关阅读:
    this,static,执行程序的顺序等等留意点
    PHP 中的 $this, static , self ,parent 等等关键字的总结
    css的继承之width属性(容易忽略)
    SDK和API之间有什么关系呢?
    JDK8下载账号分享
    Google大数据三篇著名论文-中文版
    HBase性能优化方法总结
    Hbase原理解析
    Java多线程
    XMind 是一个全功能的思维导图和头脑风暴软件,为激发灵感和创意而生
  • 原文地址:https://www.cnblogs.com/xuzekun/p/7424196.html
Copyright © 2020-2023  润新知