有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准
https://blog.zysicyj.top
全网最细面试题手册,支持艾宾浩斯记忆法。这是一份最全面、最详细、最高质量的 java面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。 https://store.amazingmemo.com/chapterDetail/1685324709017001`
MyBatis中的延迟加载
MyBatis 确实支持延迟加载,也称为懒加载(Lazy Loading)。延迟加载是一种优化技术,在对象的关联属性被真正使用时才加载其数据,而不是在查询主对象时就加载所有的关联属性。这样可以提高性能,尤其是当关联的数据量很大或者关联层次很深时。
实现原理
MyBatis的延迟加载实现原理主要依赖于代理对象。当查询操作返回一个对象时,如果配置了延迟加载,MyBatis会为关联的属性生成一个代理对象。这个代理对象内部包含了真正加载数据所需的参数和映射语句。当程序第一次访问这个代理对象的某个方法时,代理对象会触发一个加载过程,即执行预先定义的映射语句来从数据库中加载数据。
以下是实现延迟加载的步骤:
- 配置开启延迟加载:在MyBatis的配置文件中设置
lazyLoadingEnabled为true来开启延迟加载。
<settings>
<!-- 开启延迟加载 -->
<setting name="lazyLoadingEnabled" value="true"/>
</settings>
- 配置触发加载的方法:可以通过
aggressiveLazyLoading配置项来控制何时触发加载。如果设置为true,则任何关联对象的方法调用都会加载数据;如果设置为false,则只有当访问关联对象的属性时才会触发加载。
<settings>
<!-- 控制何时触发加载 -->
<setting name="aggressiveLazyLoading" value="false"/>
</settings>
- 使用association和collection配置关联映射:在映射文件中,使用
association(对于一对一关系)和collection(对于一对多关系)标签来配置关联映射,并指定fetchType为lazy。
<mapper>
<resultMap id="blogResultMap" type="Blog">
<association property="author" column="author_id"
javaType="Author" fetchType="lazy"/>
</resultMap>
</mapper>
- 访问关联属性触发加载:在应用代码中,当访问对象的关联属性时,如果该属性尚未加载,MyBatis会执行关联的映射语句来加载数据。
Blog blog = blogMapper.selectBlog(1);
Author author = blog.getAuthor(); // 访问author属性,触发延迟加载
通过以上步骤,MyBatis可以实现延迟加载,从而提高应用性能。
本文是原创文章,采用 CC BY-NC-SA 4.0 协议,完整转载请注明来自 小朱
评论
隐私政策
0/500
滚动到此处加载评论...


