MyBatisMyBatis_延迟加载

一、延迟加载

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

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

二、关联对象的加载时机

  MyBatis依照对涉及对象查询的select语句的履行时机,分为二种档次:直接加载、侵入式延迟加载、深度延迟加载。

  • 一向加载:执行完对主加载对象的select语句,顿时执行对事关对象的select查询。

  • 侵入式延迟加载:执行对主加载对象的查询时,不会执行对涉嫌对象的询问。但当要拜访主加载对象的详情时,就会即刻执行关联对象的select查询,即对关联对象的询问执行,侵入到主加载对象的详情访问中。(将关乎对象的详情侵入到了主加载对象的详情中,即将关联对象的详情作为主加载对象的详情一
    部分出现)
  • 纵深延迟加载:执行对主加载对象的查询时,不会执行对涉嫌对象的询问。访问主加载对象的详情时也不会进行关联对象的select查询。只要当真正访问关联对象的详情时,才会履行对关联对象的select查询。

 

示例:建立country和minister的DB表

MyBatis 1

MyBatis 2

MyBatis, 

MyBatis 3

MyBatis 4

直接加载示例:

<setting name="lazyLoadingEnabled" value="flase"/>

地点的讲话,系统默认设置为“false”

输出:

MyBatis 5

纵深延迟加载示例(只访问cname,就不查minister表,提升了频率)

<!--设置整个应用所使用的常量  -->
<settings>
 <setting name="lazyLoadingEnabled" value="true"/>//系统默认"aggressiveLazyLoading"为false
</settings>

“lazyLoadingEnabled”类似于开关功效。

MyBatis 6

@Test
    public void test01() {
        Country country = dao.selectCountryById(1);
        System.out.println(country.getCname());
    }

履行各类如下(当前“aggressiveLazyLoading”为false):

MyBatis 7

MyBatis 8

侵入式延迟示例:

<settings>
 <setting name="lazyLoadingEnabled" value="true"/>
 <setting name="aggressiveLazyLoading" value="true"/>
</settings>

 

实施顺序如下:

MyBatis 9

MyBatis 10

 

总结:

MyBatis 11

 

网站地图xml地图