MyBatis 懒加载
懒加载的概念
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 懒加载的更多相关文章
- Mybatis 懒加载使用及源码分析
Mybatis 懒加载的使用 什么是懒加载?懒加载的意思就是在使用的时候才去加载,不使用不去加载,相反的就叫饥饿加载或者立即加载.懒加载在Mybatis中一般是存在与联合查询的情况,比如查询一个对象的 ...
- mybatis 详解(八)------ 懒加载
本章我们讲如何通过懒加载来提高mybatis的查询效率. 本章所有代码:http://pan.baidu.com/s/1o8p2Drs 密码:trd6 1.需求:查询订单信息,有时候需要关联查出用户信 ...
- mybatis和hibernate中的懒加载
概念:所谓懒加载就是延时加载,延迟加载.什么时候用懒加载呢,我只能回答要用懒加载的时候就用懒加载.至于为什么要用懒加载呢,就是当我们要访问的数据量过大时,明显用缓存不太合适,因为内存容量有限 ,为了减 ...
- MyBatis关联查询和懒加载错误
MyBatis关联查询和懒加载错误 今天在写项目时遇到了个BUG.先说一下背景,前端请求更新生产订单状态,后端从前端接收到生产订单ID进行查询,然后就有问题了. 先看控制台报错: org.apache ...
- mybatis(三)懒加载
懒加载的好处: 所谓懒加载(lazy)就是延时加载,延迟加载.什么时候用懒加载呢,我只能回答要用懒加载的时候就用懒加载.至于为什么要用懒加载呢,就是当我们要访问的数据量过大时,明显用缓存不太合适,因为 ...
- 关于 Mybatis 设置懒加载无效的问题
看了 mybatis 的教程,讲到关于mybatis 的懒加载的设置: 只需要在 mybatis 的配置文件中设置两个属性就可以了: <settings> <!-- 打开延迟加载的开 ...
- mybatis中的懒加载
知识点:mybatis中的懒加载的使用 参考:https://www.cnblogs.com/ysocean/p/7336945.html?utm_source=debugrun&utm_me ...
- mybatis中使用懒加载实现一对多复杂查询
1.包结构 2.pom配置 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&qu ...
- mybatis入门截图四(订单商品数据模型-懒加载-缓存)
<!-- 延迟加载的resultMap --> <resultMap type="cn.itcast.mybatis.po.Orders" id="Or ...
随机推荐
- tomcat端口号被占用,且杀进程不能够杀掉解决办法
在电脑上安装了zookeeper以后,配置好tomcat启动发现端口号8009端口号被占用,报错如下: 采用netstat –ano 查询所有进程查看或者根据端口号查进程netstat -ano |f ...
- linux下安装mysql5.7(centos6.0)
注:因为网络原因,这个mysql安装是我以前在学校的时候找到的一个安装包,不过也找到了下载的地址:http://www.itmop.com/downinfo/143061.html下载完成后,把文件上 ...
- Redis 详解 (三) redis的五大数据类型详细用法
目录 1.string 数据类型 2.hash 数据类型 3.list 数据类型 4.set 数据类型 5.zset 数据类型 6.系统相关命令 7.key 相关命令 我们说 Redis 相对于 Me ...
- php.laravel.部署
Laravel 的部署 D 参考laravel-china的做 | 其他参考 | 重要的参考 | Nginx github | 如果想要ssl 啊
- 【STM32H7教程】第51章 STM32H7的LTDC应用之LCD汉字显示和2D图形显示
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第51章 STM32H7的LTDC应用之LCD汉字 ...
- 049-PHP输出当前文件的名称
<?php echo __FILE__; //利用常量__FILE__输出当前文件的名称 ?>
- 2. FTP 服务器安装
vsftp 安装(linux) Linux : 安装,创建虚拟用户,配置,防火墙设置 1. 安装 执行yum -y install vsftpd 注意: (1) 是否使用sudo权限执行请根据您具体环 ...
- Mysql安装维护笔记一
1.Centos7安装mysql rpm安装PHP7相应的yum源 $wget 'https://dev.mysql.com/get/mysql57-community-release-el7-11. ...
- 51nod 1105:第K大的数
1105 第K大的数 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 数组A和数组B,里面都有n个整数.数组C共有n^2个整数,分别是A[0] * ...
- 大二暑假第五周总结--开始学习Hadoop基础(四)
简单学习MapReduce并进行WordCount实践 分布式并行编程: MapReduce设计的一个理念就是“计算向数据靠拢”,将复杂的,运行于大规模集群上的并行计算过程高度地抽象到两个函数:Map ...