当前位置: 首页 > news >正文

mybatis的延迟加载

延迟加载

1. 回顾:在Hibernate 中 many2one的时候会用到延迟加载

  1)从many方拿one方的时候回使用延迟加载的方式, 程序到many方的时候,只发送一条SQL,只有当真正使用many方对应的one方的时候,才会去发送SQL进行查询

  2)什么是真正使用?  访问one方的非主键属性

  3)延迟加载的原理:动态代理:在Hibernate中,被动态代理的延迟对象是one方;many方还是第一个普通的一个对象;

2.mybatis中呢?

  1)在mybatis 中默认没有使用延迟加载

  2)怎么使用延迟加载呢?

  

  在mybatis的配置中  配置一个setting的元素

1    <!-- setting中的配置都是针对mybatis的运行行为进行配置的 -->
2      <settings>
3          <setting name="lazyLoadingEnabled" value="true"/>
4      </settings>

  3)在mybatis中,延迟加载也是使用动态代理完成的,但是在mybatis中,被代理的对象不是one方,而是many方本身.所以,默认情况下一旦我访问了这个延迟加载对象任何一个属性,都会触发这个延迟加载对象的加载(默认情况下e.getName();也会吃法dept的查询),这不是我们想要的结果,我们想要的是在需要dept的时候,才去查询dept对象.

1 <!-- setting中的配置都是针对mybatis的运行行为进行配置的 -->
2     <settings>
3         <setting name="lazyLoadingEnabled" value="true"/>
4         <!-- 默认为true,代表只要访问延迟加载对象的任意一个属性,都会导致这个延迟加载对象的完全加载,
5             设置为false,代表按需加载 -->
6         <setting name="aggressiveLazyLoading" value="false"/>
7     </settings>

3.在mybatis中,不管怎么设置,只要访问到one方,one方就会被加载,Hibernate中到访问one方的非主键属性的时候才会被加载,这也是mybatis和Hibernate的区别之一

4.在mybatis中,默认情况下只要调用了equals,clone,hashCode,toString这几个方法,都会对对象进行完全加载

 

 

 

那么我们在打印对象的时候,即使不打印dept属性,也会对这个对象进行完全加载,因为toString方法

<!-- 改变默认配置,使只有调用clone方法的时候才会触发完全加载 -->
<setting name="lazyLoadTriggerMethods" value="clone"/>

1 <!-- setting中的配置都是针对mybatis的运行行为进行配置的 -->
2     <settings>
3         <setting name="lazyLoadingEnabled" value="true"/>
4         <!-- 默认为true,代表只要访问延迟加载对象的任意一个属性,都会导致这个延迟加载对象的完全加载,
5             设置为false,代表按需加载 -->
6         <setting name="aggressiveLazyLoading" value="false"/>
7         <!-- 改变默认配置,使只有调用clone方法的时候才会触发完全加载 -->
8         <setting name="lazyLoadTriggerMethods" value="clone"/>
9     </settings>

这样就可以提高性能了

 

转载于:https://www.cnblogs.com/llynic/p/6377783.html

相关文章:

  • OVS VxLAN Flow 分析 - 每天5分钟玩转 OpenStack(149)
  • [Manacher]【学习笔记】
  • python 常见问题总结
  • http通信json解析过滤无关字符
  • kalilinux、parrotsecos没有声音
  • Git 使用集
  • CentOS修改时区、日期、时间
  • ntdsutil 清理弃用服务器-----待验证
  • 无线通信基础资料总结1 之 GSM
  • SPOJ Highways [矩阵树定理]
  • ​插件化DPI在商用WIFI中的价值
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • Xcode8 打包ios app,上传APPStore,发布流程 以及证书和配置文件遇到的坑
  • 数据结构与算法 第四次实验报告 图
  • php 验证邮箱的方法
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • 2019年如何成为全栈工程师?
  • linux安装openssl、swoole等扩展的具体步骤
  • Redis学习笔记 - pipline(流水线、管道)
  • Swoft 源码剖析 - 代码自动更新机制
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 从0实现一个tiny react(三)生命周期
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 对超线程几个不同角度的解释
  • 分享几个不错的工具
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 前端知识点整理(待续)
  • 前嗅ForeSpider中数据浏览界面介绍
  • 浅谈Golang中select的用法
  • 世界上最简单的无等待算法(getAndIncrement)
  • 浅谈sql中的in与not in,exists与not exists的区别
  • ​secrets --- 生成管理密码的安全随机数​
  • ​卜东波研究员:高观点下的少儿计算思维
  • ###C语言程序设计-----C语言学习(3)#
  • #《AI中文版》V3 第 1 章 概述
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (pojstep1.1.2)2654(直叙式模拟)
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (四) Graphivz 颜色选择
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
  • .NET DataGridView数据绑定说明
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .Net 垃圾回收机制原理(二)
  • .Net程序帮助文档制作
  • [ 隧道技术 ] cpolar 工具详解之将内网端口映射到公网
  • [【JSON2WEB】 13 基于REST2SQL 和 Amis 的 SQL 查询分析器
  • [20161101]rman备份与数据文件变化7.txt
  • [2019/05/17]解决springboot测试List接口时JSON传参异常
  • [20190113]四校联考
  • [AIGC] SQL中的数据添加和操作:数据类型介绍
  • [BT]BUUCTF刷题第4天(3.22)