9_Mybatis 是否支持延迟加载,实现原理是什么?

本文详细阐述了Mybatis如何通过CGLIB实现一对一(association)和一对多(collection)关联对象的延迟加载,配置lazyLoadingEnabled属性以及其工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Mybatis仅支持association关联对象和collection关联集合对象的延迟加载
	association 指的就是一对一查询
	collection  指的就是一对多查询
	
	在Mybatis配置文件中,可以配置是否启用延迟加载 
	lazyLoadingEnabled=true|false
 
 2.原理是:
 	使用 CGLIB 创建目标对象的代理对象
 	当调用目标方法时,进入拦截器方法
 	调用 a.getB().getName(),拦截器 invoke()方法发现 a.getB()null 值
 	那么就会单独发送事先保存好的查询关联B对象的sql
 	把B查询上来,然后调用 a.setB(b)
 	于是a的对象b属性就有值了
 	接着完成a.getB().getName()方法的调用

1.Mybatis仅支持association关联对象和collection关联集合对象的延迟加载
association 指的就是一对一查询
collection 指的就是一对多查询
在Mybatis配置文件中,可以配置是否启用延迟加载
lazyLoadingEnabled=true|false

2.原理是:
使用 CGLIB 创建目标对象的代理对象
当调用目标方法时,进入拦截器方法
调用 a.getB().getName(),拦截器 invoke()方法发现 a.getB()是 null 值
那么就会单独发送事先保存好的查询关联B对象的sql
把B查询上来,然后调用 a.setB(b)
于是a的对象b属性就有值了
接着完成a.getB().getName()方法的调用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值