MyBatis_延迟加载01
2024-08-27 11:31:32
一、延迟加载
MyBatis中的延迟加载,也称为懒加载,是指在进行关联查询时, 按照设置延迟规则推迟对关联对象的select查询。延迟加载可以有效的减少数据库压力。
MyBatis的延迟加载只是对关联对象的查询有延迟设置,对于主加载对象都是直接执行查询语句的。
二、关联对象的加载时机
MyBatis根据对关联对象查询的select语句的执行时机,分为三种类型:直接加载、侵入式延迟加载、深度延迟加载。
- 直接加载:执行完对主加载对象的select语句,马上执行对关联对象的select查询。
- 侵入式延迟加载:执行对主加载对象的查询时,不会执行对关联对象的查询。但当要访问主加载对象的详情时,就会马上执行关联对象的select查询,即对关联对象的查询执行,侵入到主加载对象的详情访问中。(将关联对象的详情侵入到了主加载对象的详情中,即将关联对象的详情作为主加载对象的详情一 部分出现)
- 深度延迟加载:执行对主加载对象的查询时,不会执行对关联对象的查询。访问主加载对象的详情时也不会执行关联对象的select查询。只要当真正访问关联对象的详情时,才会执行对关联对象的select查询。
示例:建立country和minister的DB表
直接加载示例:
<setting name="lazyLoadingEnabled" value="flase"/>
上面的语句,系统默认设置为“false”
输出:
深度延迟加载示例(只访问cname,就不查minister表,提高了效率):
<!--设置整个应用所使用的常量 -->
<settings>
<setting name="lazyLoadingEnabled" value="true"/>//系统默认"aggressiveLazyLoading"为false
</settings>
"lazyLoadingEnabled"类似于开关功能。
@Test
public void test01() {
Country country = dao.selectCountryById(1);
System.out.println(country.getCname());
}
执行顺序如下(当前“aggressiveLazyLoading”为false):
侵入式延迟示例:
<settings>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="aggressiveLazyLoading" value="true"/>
</settings>
执行顺序如下:
总结:
最新文章
- idea开发工具破解地址
- HDU3333 Turing Tree(线段树)
- easyUI datagrid笔记
- 水晶报表设置FiledObject支持HTML格式的数据
- 强连通(hdu4635)最多增加几条单向边后满足最终的图形不是强连通
- C++ const &;&; 二叉树合集
- WinCE启动失败的原因与解决办法分析
- web项目环境搭建(3):搭建Spring+MyBatis
- JIRA官方:JIRA源代码集成
- 积累的VC编程小技巧之工具提示
- 参加persist.sys物业写权限的方法
- delphi 获得memo,Richedit焦点所在行
- 一个URL的组成
- BZOJ 4551[Tjoi2016&;Heoi2016]树(树链剖分+二分)
- _C#发送邮箱
- .net core2.x 自动注入 Entity(实体对象到上下文)
- C++ Boost库分类总结
- tkinter学习系列之(七)Frame与Labelframe 控件
- JavaScript学习 - 基础(四) - 控制语句/异常处理
- Pytorch入门之VAE
热门文章
- Maven 项目pom.xml报错
- C# 控件的缩写
- Linux系列教程(二十)——Linux的shell概述以及如何执行脚本
- 设计模式的征途—9.组合(Composite)模式
- MySQL索引与Index Condition Pushdown
- shell脚本 expect 实现自动登陆
- EditText 限制输入整数和小数 的位数
- open_basedir restriction in effect.文件访问没有权限异常
- 关于回调(callback)
- cardview和Palette,ActionBar颜色随图改变