懒加载的概念

MyBatis中的延迟加载,也称为懒加载,是指进行关联查询时,按需执行子查询。

当程序需要获取|使用关联对象时,mybatis再执行子查询,这样可以减轻数据库的压力,在一定程度上可以降低程序运行消耗、提高查询效率。

懒加载的适用场景:

当前业务只使用主加载对象的其他属性,或者暂时只使用主加载对象的其他属性,长时间以后才使用主加载对象的关联对象属性。

懒加载只对关联查询起作用(一对一、一对多、多对多),且只对嵌套查询方式起作用,因为嵌套结果、扩展类的方式都是一次查询所需数据,不存在子查询,也就不存在延迟加载的情况。

MyBatis的延迟加载只是延迟执行子查询,对于主加载对象的查询都是直接执行的。


子查询的执行时机(关联对象的加载时机)

一共有三种:

  • 直接加载:执行完主加载对象的查询,马上执行子查询。
  • 侵入式延迟: 先执行主加载对象的查询,后续使用主加载对象的属性时(调用getter方法)才执行子查询。只要使用主加载对象的属性,就执行子查询。
  • 深度延迟:先执行主加载对象的查询,后续使用主加载对象的关联对象属性时才执行子查询。使用的属性要是主加载对象的关联对象属性时,才执行子查询。

懒加载一共有2种方式,按照懒的程度,分为侵入式延迟、深度延迟。


配置方式

可在全局配置文件中进行配置,也可以在映射文件中进行配置。

(1)直接加载

默认就是直接加载,什么都不用配置,当然也可以显式配置:

   <settings>
<setting name="lazyLoadingEnabled" value="false"/>
</settings>

(2)侵入式延迟

    <settings>
<!-- 使用懒加载 -->
<setting name="lazyLoadingEnabled" value="true"/>
<!-- 使用侵入式延迟的懒加载 -->
<setting name="aggressiveLazyLoading" value="true"/>
</settings>

aggressive 咄咄逼人的、激进的、主动模式的、喜好侵入的,一有机会就加载,故名侵入式延迟。

缺省aggressiveLazyLoading时,默认为true——侵入式延迟。(据说旧版本的默认值是false——深度延迟,我未去验证。)

(3)深度延迟

 <settings>
<!-- 使用懒加载 -->
<setting name="lazyLoadingEnabled" value="true"/>
<!-- 使用深度延迟的懒加载 -->
<setting name="aggressiveLazyLoading" value="false"/>
</settings>

(4)也可以在映射文件的<association>或<collection>中单独配置某个关联对象的加载方式

<collection property="goodsList" select="com.chy.mapper.GoodsMapper.queryGoodsByGoodsId" column="no" ofType="goods" fetchType="lazy"/>

有2个可选的值:

  • eager  直接加载,默认值。eager 饥渴的。
  • lazy  深度延迟。

此种方式不能指定为侵入式延迟。

在全局配置文件中进行的配置是配置所有的,在映射文件中的配置是配置单个的。

如果在mybatis全局配置文件中显式配置了懒加载,又在映射文件中配置了懒加载,冲突时以全局配置文件中的配置为准。

MyBatis 懒加载的更多相关文章

  1. Mybatis 懒加载使用及源码分析

    Mybatis 懒加载的使用 什么是懒加载?懒加载的意思就是在使用的时候才去加载,不使用不去加载,相反的就叫饥饿加载或者立即加载.懒加载在Mybatis中一般是存在与联合查询的情况,比如查询一个对象的 ...

  2. mybatis 详解(八)------ 懒加载

    本章我们讲如何通过懒加载来提高mybatis的查询效率. 本章所有代码:http://pan.baidu.com/s/1o8p2Drs 密码:trd6 1.需求:查询订单信息,有时候需要关联查出用户信 ...

  3. mybatis和hibernate中的懒加载

    概念:所谓懒加载就是延时加载,延迟加载.什么时候用懒加载呢,我只能回答要用懒加载的时候就用懒加载.至于为什么要用懒加载呢,就是当我们要访问的数据量过大时,明显用缓存不太合适,因为内存容量有限 ,为了减 ...

  4. MyBatis关联查询和懒加载错误

    MyBatis关联查询和懒加载错误 今天在写项目时遇到了个BUG.先说一下背景,前端请求更新生产订单状态,后端从前端接收到生产订单ID进行查询,然后就有问题了. 先看控制台报错: org.apache ...

  5. mybatis(三)懒加载

    懒加载的好处: 所谓懒加载(lazy)就是延时加载,延迟加载.什么时候用懒加载呢,我只能回答要用懒加载的时候就用懒加载.至于为什么要用懒加载呢,就是当我们要访问的数据量过大时,明显用缓存不太合适,因为 ...

  6. 关于 Mybatis 设置懒加载无效的问题

    看了 mybatis 的教程,讲到关于mybatis 的懒加载的设置: 只需要在 mybatis 的配置文件中设置两个属性就可以了: <settings> <!-- 打开延迟加载的开 ...

  7. mybatis中的懒加载

    知识点:mybatis中的懒加载的使用 参考:https://www.cnblogs.com/ysocean/p/7336945.html?utm_source=debugrun&utm_me ...

  8. mybatis中使用懒加载实现一对多复杂查询

    1.包结构 2.pom配置 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&qu ...

  9. mybatis入门截图四(订单商品数据模型-懒加载-缓存)

    <!-- 延迟加载的resultMap --> <resultMap type="cn.itcast.mybatis.po.Orders" id="Or ...

随机推荐

  1. 我为NET狂官方面试题-数据库篇答案(转)

    题目:http://www.cnblogs.com/dunitian/p/6028838.html 汇总:http://www.cnblogs.com/dunitian/p/5977425.html ...

  2. mybatis xml <if>判断字符串相等

    mybatis 映射文件中,if标签判断字符串相等,两种方式: 因为mybatis映射文件,是使用的ognl表达式,所以在判断字符串sex变量是否是字符串Y的时候, <if test=" ...

  3. 记录一次SQLServer 2019 MDS问题的排查

    问题表象: MDS网页里看不到任何建立的模型和实体. 用Excel add in连接,提示SQLServer授权过期. 但实际上SQLServer是企业版,目前并没有过期. 背景分析: 我们的环境是从 ...

  4. list实体数据分组

    比如查询获取了60000条数据进行批量插入数据库,一次直接插入6万可能不是很好,可以将6万条数据按照5000分成几组,每组批量插入5000条 List<T> list = new List ...

  5. HDU 3397 线段树 双懒惰标记

    这个是去年遗留历史问题,之前思路混乱,搞了好多发都是WA,就没做了 自从上次做了大白书上那个双重懒惰标记的题目,做这个就思路很清晰了 跟上次大白上那个差不多,这个也是有一个sets标记,代表这个区间全 ...

  6. ELK 介绍

    章节 ELK 介绍 ELK 安装Elasticsearch ELK 安装Kibana ELK 安装Beat ELK 安装Logstash ELK是什么? ELK是3个开源产品的组合: Elastics ...

  7. 08 SSM整合案例(企业权限管理系统):08.权限控制

    04.AdminLTE的基本介绍 05.SSM整合案例的基本介绍 06.产品操作 07.订单操作 08.权限控制 09.用户操作 10.权限关联与控制 11.AOP日志 08.权限控制 SSM权限操作 ...

  8. chrome浏览器安装vue调试器vue-devtools

    chrome浏览器安装vue调试器vue-devtools https://blog.csdn.net/zhangjnwei/article/details/76693053

  9. POJ 2182&& POJ 2828:Lost Cows 从后往前 线段树

    Lost Cows Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10544   Accepted: 6754 Descri ...

  10. 在Mac上使用docker+sql server+Navicat

    1. 版本:  2. 安装Kubernetes(并不知道安装这个有什么用) git clone https://github.com/maguowei/k8s-docker-desktop-for-m ...