一、延迟加载

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>

执行顺序如下:

总结:

最新文章

  1. idea开发工具破解地址
  2. HDU3333 Turing Tree(线段树)
  3. easyUI datagrid笔记
  4. 水晶报表设置FiledObject支持HTML格式的数据
  5. 强连通(hdu4635)最多增加几条单向边后满足最终的图形不是强连通
  6. C++ const &amp;&amp; 二叉树合集
  7. WinCE启动失败的原因与解决办法分析
  8. web项目环境搭建(3):搭建Spring+MyBatis
  9. JIRA官方:JIRA源代码集成
  10. 积累的VC编程小技巧之工具提示
  11. 参加persist.sys物业写权限的方法
  12. delphi 获得memo,Richedit焦点所在行
  13. 一个URL的组成
  14. BZOJ 4551[Tjoi2016&amp;Heoi2016]树(树链剖分+二分)
  15. _C#发送邮箱
  16. .net core2.x 自动注入 Entity(实体对象到上下文)
  17. C++ Boost库分类总结
  18. tkinter学习系列之(七)Frame与Labelframe 控件
  19. JavaScript学习 - 基础(四) - 控制语句/异常处理
  20. Pytorch入门之VAE

热门文章

  1. Maven 项目pom.xml报错
  2. C# 控件的缩写
  3. Linux系列教程(二十)——Linux的shell概述以及如何执行脚本
  4. 设计模式的征途—9.组合(Composite)模式
  5. MySQL索引与Index Condition Pushdown
  6. shell脚本 expect 实现自动登陆
  7. EditText 限制输入整数和小数 的位数
  8. open_basedir restriction in effect.文件访问没有权限异常
  9. 关于回调(callback)
  10. cardview和Palette,ActionBar颜色随图改变