mybatis延迟加载

一、什么叫延迟加载

  • 延迟加载,也被称为是嵌套查询,或者懒加载。用于嵌套查询的时候
  • 结合resultMap标签中的associationcollection子标签使用,用于一对一、一对多等嵌套查询
  • 延迟二字就是体现在嵌套查询时,如果不访问被嵌套的数据,那么就不会查询出嵌套的数据,比如查询某个用户下所有的订单,但是最开始只需要显示用户信息,点击订单详情的时候才显示订单明细,如果能做到开始只用户信息,点击订单详情的时候再查询订单明细,就不需要进行两表联查了,可以提高查询的效率,节省内存,这就是延迟加载

二、延迟加载分类

  • 直接加载(不算延迟加载): 执行完对主加载对象的select语句,马上执行对关联对象的select查询
  • 侵入式延迟: 执行对主加载对象的查询时,不会执行对关联对象的查询。但当要访问主加载对象的某个属性(该属性不是关联对象的属性)时,就会马上执行关联对象的select查询。
  • 深度延迟: 执行对主加载对象的查询时,不会执行对关联对象的查询。访问主加载对象的详情时也不会执行关联对 象的select查询。只有当真正访问关联对象的详情时,才会执行对关联对象的select查询

三、延迟加载配置

侵入式延迟

<settings>
 <!-- 延迟加载总开关,默认false -->
 <setting name="lazyLoadingEnabled" value="true"/>
 <!-- 侵入式延迟加载开关 -->
 <setting name="aggressiveLazyLoading" value="true"/>
</settings>

深度延迟

<settings>
 <!-- 延迟加载总开关,默认false -->
 <setting name="lazyLoadingEnabled" value="true"/>
 <!-- 侵入式延迟加载开关 -->
 <setting name="aggressiveLazyLoading" value="false"/>
</settings>

四、实现原理

mybatis框架实现的时候,对于主信息是直接查询,而关联的从信息,要在业务代码里面要访问那个属性,这个属性属于哪个关联表,那么就查询这个关联表,以此不断查询关联表

五、优劣

优:
深度延迟加载的使用会提升性:毕竟用的时候才访问
 
劣:
如果延迟加载的关联表数据太多,此时会产生1+ N 问题:
  • 主信息加载一次算1次,
  • 从信息是会根据主信息传递过来的条件,去查询从表多次
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值