MyBatis_延迟加载01
一、延迟加载
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>
执行顺序如下:


总结:

MyBatis_延迟加载01的更多相关文章
- MyBatis关联关系
1.一对多:一个国家对应多个城市 01.实体类 package cn.pb.bean;import java.util.Set;/** * 国家的实体类 */public class Country ...
- 解析ASP.NET Mvc开发之EF延迟加载 分类: ASP.NET 2014-01-04 01:29 4017人阅读 评论(1) 收藏
目录: 从明源动力到创新工场这一路走来 解析ASP.NET WebForm和Mvc开发的区别 解析ASP.NET 和Mvc开发之查询数据实例 ----------------------------- ...
- MyBatis_查询缓存01
一.查询缓存 查询缓存的使用,主要是为了提高查询访问速度.将用户对同一数据的重复查询过程简单化,不在每次均从数据库中查询获取结果数据,从而提高访问速度. MyBatis的查询缓存机制,根据缓存区的作用 ...
- Hibernnate延迟加载策略(这么详细你还看不懂)
好久没有认真写过博客了,今天就好好的写一篇吧!!!!!!!!! 当Hibernate 从数据库中加载某个对象(例如:Dept对象)时,如果同时自动加载所有的关联的某个对象(例如:Emp对象),而程序实 ...
- Hibernate之lazy延迟加载
一.延迟加载的概念 当Hibernate从数据库中加载某个对象时,不加载关联的对象,而只是生成了代理对象,获取使用session中的load的方法(在没有改变lazy属性为false的情况下)获取到的 ...
- Hibernate 延迟加载
一.什么是延迟加载? 延迟加载是指当应用程序想要从数据库获取对象时(在没有设置lazy属性值为false),Hibernate只是从数据库获取符合条件的对象的OId从而生成代理对象,并没有加载出对象访 ...
- Hibernate之lazy延迟加载(转)
一.延迟加载的概念 当Hibernate从数据库中加载某个对象时,不加载关联的对象,而只是生成了代理对象,获取使用session中的load的方法(在没有改变lazy属性为false的情况下)获取到的 ...
- javascript高级编程笔记01(基本概念)
1.在html中使用JavaScript 1. <script> 元素 <script>定义了下列6个属性: async:可选,异步下载外部脚本文件. charset:可选, ...
- javascript预加载和延迟加载
延迟加载javascript,也就是页面加载完成之后再加载javascript,也叫on demand(按需)加载,一般有一下几个方法: What can your tired old page, o ...
随机推荐
- java 数据分页
分页逻辑 import lombok.Data; /** * User eric * Date * Email yq@aso.ren */ @Data public class PageHelper ...
- 利用java的net包来实在数据采集的功能
最近有好多朋友问我,数据抓取用java怎么做,就是每天把新浪的内地新闻频道的新闻前20条,抓到自己的网站或系统里,今天我统一在这里提供一个简单的例子,由于在这个过程中还需要解析html字符串,所以,我 ...
- JS规范2
百度SS Javascript编码规范 1.变量.方法命名必须匹配正则:/^[$_a-zA-Z]\w*$/ /** * 虽然Javascript引擎支持多种格式命名的变量, * 比如下面这样的变量,J ...
- 2733:判断闰年-poj
2733:判断闰年 总时间限制: 1000ms 内存限制: 65536kB 描述 判断某年是否是闰年. 输入 输入只有一行,包含一个整数a(0 < a < 3000) 输出 一行,如果 ...
- lazy ideas in programming(编程中的惰性思想)
lazy形容词,懒惰的,毫无疑问是一个贬义词.但是,对于计算机领域,lazy却是非常重要的优化思想:把任务推迟到必须的时刻,好处是避免重复计算,甚至不计算.本文的目的是抛砖引玉,总结一些编程中的laz ...
- ios协议和委托
在iPhone开发协议和委托是常接触到的东西,到底什么是协议什么是委托,他们什么关系? 一 协议 (1)协议相当于没有与类相关联的接口,他申明一组方法,列出他的参数和返回值,共享给其他类使用,然后不进 ...
- ES 入门之一 安装ElasticSearcha
安装ElasticSearcha 学习ES也有快一个月了,但是学习的时候一直没有总结.以前没有总结是因为感觉不会的很多,现在对ES有一点了解了.索性就从头从安装到使用ES做一个详细的总结,也分享给其他 ...
- listviewMyAdapter
import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory; ...
- 简单购物车程序(Python)
#简单购物车程序:money_all=0tag=Trueshop_car=[]shop_info={'apple':10,'tesla':100000,'mac':3000,'lenovo':3000 ...
- mssql执行计划查看的一些知识
在MSSQL中,查看较慢语句的执行计划,就是一个比较直观的方式, 如果查看执行计划呢: 1.从右到左,从上到下的顺序阅读执行计划2.执行计划中每个图标代表一个运算符,总开销为100%3.数据从右向左在 ...