网站首页 > 技术文章 正文
懒加载的概念
MyBatis中的延迟加载,也称为懒加载,是指进行关联查询时,按需执行子查询。
当程序需要获取|使用关联对象时,mybatis再执行子查询,这样可以减轻数据库的压力,在一定程度上可以降低程序运行消耗、提高查询效率。
懒加载的适用场景:
当前业务只使用主加载对象的其他属性,或者暂时只使用主加载对象的其他属性,长时间以后才使用主加载对象的关联对象属性。
懒加载只对关联查询起作用(一对一、一对多、多对多),且只对嵌套查询方式起作用,因为嵌套结果、扩展类的方式都是一次查询所需数据,不存在子查询,也就不存在延迟加载的情况。
MyBatis的延迟加载只是延迟执行子查询,对于主加载对象的查询都是直接执行的。
子查询的执行时机(关联对象的加载时机)
一共有三种:
- 直接加载:执行完主加载对象的查询,马上执行子查询。
- 侵入式延迟: 先执行主加载对象的查询,后续使用主加载对象的属性时(调用getter方法)才执行子查询。只要使用主加载对象的属性,就执行子查询。
- 深度延迟:先执行主加载对象的查询,后续使用主加载对象的关联对象属性时才执行子查询。使用的属性要是主加载对象的关联对象属性时,才执行子查询。
懒加载一共有2种方式,
按照懒的程度,分为侵入式延迟、深度延迟。
配置方式
可以在全局配置文件中进行配置,也可以在映射文件中进行配置。
(1)直接加载
默认就是直接加载,什么都不用配置,当然也可以显式配置:
<settings>
<setting name="lazyLoadingEnabled" value="false"/>
</settings>
(2)侵入式延迟
aggressiveLazyLoading = true,mybatis 是按层级延时加载
<settings>
<!-- 使用懒加载 -->
<setting name="lazyLoadingEnabled" value="true"/>
<!-- 使用侵入式延迟的懒加载 -->
<setting name="aggressiveLazyLoading" value="true"/>
</settings>
aggressive 咄咄逼人的、激进的、主动模式的、喜好侵入的,一有机会就加载,故名侵入式延迟
(3)深度延迟
aggressiveLazyLoading = false,mybatis 按需求加载。默认为false
<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"/>
<association property="user" column="uid" javaType="User" select="cn.ideal.mapper.UserMapper.findById"></association>
有2个可选的值:
- eager 直接加载,默认值。eager 饥渴的。
- lazy 深度延迟。
此种方式不能指定为侵入式延迟。
在全局配置文件中进行的配置是配置所有的,在映射文件中的配置是配置单个的。如果在mybatis全局配置文件中显式配置了懒加载,又在映射文件中配置了懒加载,冲突时以全局配置文件中的配置为准
参考文章地址:
https://www.cnblogs.com/chy18883701161/p/12158924.html
https://www.cnblogs.com/goloving/p/14854902.html
猜你喜欢
- 2025-06-30 悠然!晨间解锁 HTML 中 iframe 奥秘,面试难题迎刃而解
- 2025-06-30 听云APM与跨境电商丰趣海淘的前端优化最佳实践
- 2025-06-30 前端性能优化实战:从CSS加载到Vue3渲染提速
- 2025-06-30 使用懒加载 + 零拷贝后,程序的秒开率提升至99.99%
- 2024-10-07 事件加载在前端开发中的关键应用场景
- 2024-10-07 2024前端大厂面试题 Vue.js如何优化首屏加载时间
- 2024-10-07 前端面试:异步加载和延迟加载的理解?
- 2024-10-07 使用原生的js实现简易的图片延时加载
- 2024-10-07 Vue实战051:各种懒加载技术实现 vue懒加载实现原理
- 2024-10-07 Webpack 代码分离与懒加载 webpack分包加载
你 发表评论:
欢迎- 580℃几个Oracle空值处理函数 oracle处理null值的函数
- 575℃Oracle分析函数之Lag和Lead()使用
- 561℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 560℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 556℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 545℃【数据统计分析】详解Oracle分组函数之CUBE
- 533℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 529℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- 前端懒加载 (49)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle 中文 (51)
- oracle的函数 (57)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)