作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题
代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等
联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。码炫课堂的个人空间-码炫码哥个人主页-面试,源码等
回答
支持。延迟加载的意思是在使用的时候才去加载,这是一种性能优化策略。延迟加载针对有延迟设置的关联对象推迟查询,而主查询是直接执行SQL语句。
- 优点: 先从单表查询,需要时再从关联表查询,减少不必要的数据加载,提升数据库性能。
- 不足: 延迟加载会增加数据库访问次数以及增加事务管理的复杂性。
扩展
延迟加载配置
1、Mybatis 默认没有开启延迟加载,需要在全局配置文件 mybatis-config.xml 中进行设置,核心配置项:
- lazyLoadingEnabled:全局开关,启用或禁用延迟加载。
- aggressiveLazyLoading:侵入式延迟加载开关,false 表示按需加载。
<configuration>
<!-- 其他配置 -->
<settings>
<!-- 延迟加载开关 -->
<setting name="lazyLoadingEnabled" value="true"/>
<!-- 侵入式延迟加载开关(false表示按需加载) -->
<setting name="aggressiveLazyLoading" value="false"/>
</settings>
</configuration>
2、Mapper 中的关联查询collection、association标签上添加fetchType属性。
- lazy:延迟加载
- eager:立即加载
备注:指定fetchType属性后,会忽略全局配置参数的lazyLoadingEnabled配置参数。
<resultMap id="BaseResultMap" type="com.damingge.entity.Employee">
<id column="id" property="id"/>
<result column="age" property="age"/>
<result column="name" property="name"/>
<result column="address" property="contactPhone"/>
<result column="department" property="department_id"/>
<association property="department" column="department_id" javaType="com.damingge.entity.Department"
select="com.damingge.dao.DepartmentMapper.findDepartmentById"

最低0.47元/天 解锁文章
638

被折叠的 条评论
为什么被折叠?



