Mybatis延迟加载的实现方式
作者:关耳er 时间:2023-08-19 11:07:32
1、概念:
MyBatis中的延迟加载,也称为懒加载,是指在进行表的关联查询时,按照设置延迟规则推迟对关联对象的select查询。例如在进行一对多查询的时候,只查询出一方,当程序中需要多方的数据时,mybatis再发出sql语句进行查询,这样子延迟加载就可以的减少数据库压力。MyBatis 的延迟加载只是对关联对象的查询有迟延设置,对于主加载对象都是直接执行查询语句的。
2、加载时机:
直接加载:执行完对主加载对象的 select 语句,马上执行对关联对象的 select 查询。侵入式延迟: 执行对主加载对象的查询时,不会执行对关联对象的查询。但当要访问主加载对象的详情属性时,就会马上执行关联对象的select查询。深度延迟: 执行对主加载对象的查询时,不会执行对关联对象的查询。访问主加载对象的详情时也不会执行关联对象的select查询。只有当真正访问关联对象的详情时,才会执行对关联对象的 select 查询。
注意:延迟加载的应用要求:关联对象的查询与主加载对象的查询必须是分别进行的select语句,不能是使用多表连接所进行的select查询。因为,多表连接查询,实质是对一张表的查询,对由多个表连接后形成的一张表的查询。会一次性将多张表的所有信息查询出来。
3、侵入式延迟加载:
①、Mybatis-config.xml大配置文件,首先开启延迟加载,然后再配置侵入式加载
<!--开启延迟加载-->
<setting name="lazyLoadingEnabled" value="true"/>
<!--配置侵入式延迟加载 默认为false(深度加载)
侵入式:默认只会执行主加载SQL,那么当访问主加载对象的详细信息时才会执行关联对象的SQL查询
深度延迟:默认只执行主加载SQL,那么当调用到主加载对象中关联对象的信息时才会执行关联对象的SQL查询
-->
<setting name="aggressiveLazyLoading" value="true"/>
②、不调用主加载对象时只有一条SQL
③、调用主加载对象的信息时会产生两条SQL
4、深入式延迟加载:
①、Mybatis-config.xml大配置文件,首先开启延迟加载,然后再配置深度加载
<!--开启延迟加载-->
<setting name="lazyLoadingEnabled" value="true"/>
<!--配置侵入式延迟加载 默认为false(深度加载)
侵入式:默认只会执行主加载SQL,那么当访问主加载对象的详细信息时才会执行关联对象的SQL查询
深度延迟:默认只执行主加载SQL,那么当调用到主加载对象中关联对象的信息时才会执行关联对象的SQL查询
-->
<setting name="aggressiveLazyLoading" value="false"/>
②、调用主加载对象时不会执行第二条加载SQL
③、调用关联对象详细信息时会执行第二次查询
来源:https://www.cnblogs.com/Zzzzn/p/11671619.html
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
android自定义View实现简单五子棋游戏
![](https://img.aspxhome.com/file/2023/1/126681_0s.jpg)
Java 面向对象和封装全面梳理总结
LINQ基础之Intersect、Except和Distinct子句
c# 遍历 Dictionary的四种方式
![](https://img.aspxhome.com/file/2023/5/102205_0s.png)
详解context root修改无效web修改项目路径(eclipse)
![](https://img.aspxhome.com/file/2023/2/85902_0s.png)
JMeter中的后端监听器的实现
![](https://img.aspxhome.com/file/2023/8/84768_0s.jpg)
Android Wear计时器开发
![](https://img.aspxhome.com/file/2023/4/93324_0s.png)
Android编程设计模式之中介者模式详解
![](https://img.aspxhome.com/file/2023/9/139009_0s.png)
Java 匿名内部类详解及实例代码
c# socket编程udp客户端实现代码分享
Android实现ListView分页加载数据
Java截取字符串的几种方法示例
![](https://img.aspxhome.com/file/2023/5/60585_0s.png)
Spring实战之Bean的作用域singleton和prototype用法分析
Java多线程 volatile关键字详解
![](https://img.aspxhome.com/file/2023/4/125644_0s.png)
Java实现动态模拟时钟
![](https://img.aspxhome.com/file/2023/0/72390_0s.jpg)
Java读写文件,在文件中搜索内容,并输出含有该内容的所有行方式
![](https://img.aspxhome.com/file/2023/7/94207_0s.jpg)
Java concurrency集合之LinkedBlockingDeque_动力节点Java学院整理
![](https://img.aspxhome.com/file/2023/9/77409_0s.png)
Android 按后退键退出Android程序的实现方法
MyBatis Xml映射文件之字符串替换方式
springboot日期转换器实现实例解析
![](https://img.aspxhome.com/file/2023/1/67151_0s.png)