码迷,mamicode.com
首页 > 其他好文 > 详细

MyBatis 延迟加载的三种加载方式深入,你get了吗?

时间:2018-11-11 00:04:14      阅读:315      评论:0      收藏:0      [点我收藏+]

标签:lse   gen   ati   ble   情况下   深度   顺序   对象   设置   

延迟加载

  延迟加载对主对象都是直接加载,只有对关联对象是延迟加载。

  延迟加载可以减轻数据库的压力,

  延迟加载不可是一条SQL查询多表信息,这样构不成延迟加载,会形成直接加载。

  延迟加载分为三种类型:

1.直接加载

执行完主对象之后,直接执行关联对象。

2.侵入式加载

在执行主对象详情的时候,执行关联对象。

3.深度延迟加载

执行完主对象或主对象详情不会执行关联对象,只有用到关联对象数据的时候才走深度延迟加载。

  延迟加载默认情况下是关闭状态(false) 延迟加载下的侵入式加载默认情况下是开启状态(true)  在这种情况下延迟加载不生效, 比如说延迟加载是一个大的水龙头总闸,如果总闸没开,那么总闸里面的小的闸肯定没有水。如果想要使用延迟加载必须写成true

  现在知道延迟加载的状态,那他是在哪里设置开启关闭状态的呢? 答案是在大配置文件中设置延迟加载的状态

看一下几个例子

1.默认情况的延迟加载  (这是在MyBatis3.4.1版本之前的默认情况) :(aggressiveLazyLoading)侵入式延迟加载为true, 在3.4.1之后的版本(aggressiveLazyLoading)侵入式延迟加载默认值为false

技术分享图片

 

  2.侵入式延迟加载

 

技术分享图片

技术分享图片

现在看一下访问主属性的侵入式延迟加载的状态如何

技术分享图片

 

   3.深度延迟加载

深度延迟加载 大配置中的设置

技术分享图片

只访问主对象的属性,深度延迟加载的状态为:

 

技术分享图片

现在我们看一下访问关联对象的属性,深度延迟加载的状态为:

技术分享图片

 

在大配置文件设置延迟加载是使用的是setting节点,与其他节点位置顺序不要乱。

大配置中的延迟加载代码:

<settings>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="aggressiveLazyLoading" value="false"/> <!--现在的状态为深度延迟加载-->
</settings>
<settings>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="aggressiveLazyLoading" value="true"/> <!--现在的状态为侵入式延迟加载-->
</settings>

<settings>
<setting name="lazyLoadingEnabled" value="false"/>
<setting name="aggressiveLazyLoading" value="false"/> <!--现在的状态为直接加载-->(3.4.1版本之后的直接加载设置)
</settings>

<settings>
<setting name="lazyLoadingEnabled" value="false"/>
<setting name="aggressiveLazyLoading" value="true"/> <!--现在的状态为直接加载-->(3.4.1版本之前的直接加载设置)
</settings>
 

 

MyBatis 延迟加载的三种加载方式深入,你get了吗?

标签:lse   gen   ati   ble   情况下   深度   顺序   对象   设置   

原文地址:https://www.cnblogs.com/java-263/p/9940867.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!