延迟加载又叫懒加载,也叫按需加载 。也就是说先加载主信息,在需要的时候,再去加载从信息 。
在mybatis中,resultMap标签 的association标签和collection标签具有延迟加载的功能 。
1、拷贝jar包
延迟加载中查询出来的是一个代理对象,不是真正的对象本身,可参考hibernate中的load方法,利用log4j将日志信息打印在控制台可以很明确的看到,所以在使用延迟加载时,需要用到cglib包 。
<dependency> <groupId>cglib</groupId> <artifactId>cglib</artifactId> <version>3.2.6</version></dependency>2、配置全局设置
<!– 全局设置 –>
<settings>
<!-- 打开延迟加载的开关,默认为false,即非延迟加载 --> <setting name="lazyLoadingEnabled" value="https://www.jinnalai.com/fenxiang/true"/> <!-- 将积极加载改为消极加载 --> <setting name="aggressiveLazyLoading" value="https://www.jinnalai.com/fenxiang/true"/> <!--两个合在一起配置就是,消极的延迟加载--></settings>
官方对这两个属性的解释是:
lazyLoadingEnabled 全局启用或禁用延迟加载 。当禁用时,所有关联对象都会即时加载 。(是否延迟加载当前对象的关联对象)
aggressiveLazyLoading 当启用时,有延迟加载属性的对象在被调用时将会完全加载任意属性 。否则,每种属性将会按需要加载 。(是否延迟加载当前对象属性的关联对象)
延迟加载会生成代理对象
3、测试
/**
* 测试延迟加载
*/
@Testpublic void testLazyLoading(){ SqlSession session = MyBatisUtil.getSqlSession(); BlogMapper blogImpl = session.getMapper(BlogMapper.class); Blog blog = blogImpl.selectById(1); session.close();//默认是积极加载的,需要在Config配置文件的全局中配置 System.out.println(blog.getId());//System.out.println(blog.getAuthor());}
根据MyBatis官方文档中给出的案例,Blog类中关联了Author,此次测试,基于官方文档中的案例
(1)什么都不配置,且只打印blog的id
可以看出,当什么都不配置时,默认为用一个从连接池中取得的连接完成两个sql语句的查询,即非延迟,积极的查询
(2)配置 <setting name=”lazyLoadingEnabled” value=https://www.jinnalai.com/fenxiang/”true” />
aggressiveLazyLoading的默认值为false 即只配 lazyLoadingEnabled为true或者同时配置两个为一true一false的结果相同 只要结果映射中配置了association
则执行懒加载特性:不查询author的属性,则不执行子查询 。
当只有测试中的第一条输出语句执行时结果如下图:
可以看到此时是懒加载 。
当测试中的两条输出语句都执行时结果如下图:
可以看出,此时为非积极的延迟加载,只有在需要查询author时才会执行查询author的sql语句 。
(2)配置 <setting name=”lazyLoadingEnabled” value=https://www.jinnalai.com/fenxiang/”true” />且
<setting name="aggressiveLazyLoading" value="https://www.jinnalai.com/fenxiang/true"/> 此时为积极的延迟加载当只有测试中的第一条输出语句执行时结果如下图:
可以看出,此时的结果为虽然只需要blog的id,但是author依旧被查询,而且用到的是两个连接查询 。
当测试中的两条输出语句都执行时结果如下图:
推荐阅读
- 侍魂胧月传说偷懒的家伙在哪 侍魂手游偷懒的家伙位置攻略
- 懒人火锅厂家的加热包真的安全吗?
- 适合懒人的工作有哪些 为什么有人喜欢忙的工作
- 适合于懒人种的菜有哪些
- mybatis工作原理及流程 mybatis延迟加载原理
- 打开网页慢的解决方法 网页加载缓慢怎么办
- 辐射76闪退解决方法一览 辐射76加载画面闪退怎么办
- 辐射76卡加载怎么解决 辐射76卡加载问题解决方法
- 你的三角梅是懒花还是勤花品种
- 懒人粉蒸肉的做法和步骤