MyBatis 的延迟加载?
发布于
一、定义
关联查询时,只在真正用到关联对象时才执行查询加载,避免一次性加载所有数据。
二、配置
<settings>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="aggressiveLazyLoading" value="false"/>
</settings>
三、原理
- MyBatis 为关联对象创建 CGLIB 动态代理。
- 调用代理对象的方法时,触发二次查询加载数据。
- aggressiveLazyLoading=false 时,只有访问关联属性才加载。
四、注意
- 需在 SqlSession 关闭前访问关联对象,否则无法加载。
- 延迟加载减少首次查询数据量,但 N+1 问题需评估。