MyBatis延迟加载是提升数据库查询性能的关键技术,通过动态代理实现按需加载关联数据,避免不必要的数据查询。本文深度解析MyBatis延迟加载原理、配置方法和优化实践,帮助开发者解决N+1查询问题,优化高并发场景下的数据库连接池使用。掌握延迟加载技术不仅能提升面试通过率,更能显著提高应用性能。立即下载2025年Java面试宝典,获取MyBatis延迟加载的完整解决方案和实战案例,让你的项目查询效率提升50%!通过面试鸭返利网购买会员还可享25元独家优惠,助你轻松备战大厂面试。
今天我们来聊聊面试中高频出现的MyBatis延迟加载问题。理解它不仅能帮你回答好面试题,更能实际应用到项目中优化性能。废话不多说,先送福利:👉 2025年Java面试宝典:点击下载 👈 提取码: 9b3g。这份资料涵盖了大量数据库与ORM框架核心知识,包括MyBatis延迟加载的深度解析,助你面试通关!
想象一个场景:你查询订单信息时,是否需要立刻加载这个订单的所有商品详情?如果商品数据很大,且用户可能只看订单概览,立刻加载就造成了资源浪费。MyBatis延迟加载正是解决这类问题的设计!它允许MyBatis框架在真正需要关联对象数据时才执行额外的SQL查询。简单说,就是“按需加载”,避免一次性查询过多不必要的数据。
理解原理,面试才能游刃有余。MyBatis延迟加载的核心在于 动态代理。MyBatis会为需要延迟加载的关联对象生成一个代理对象。当你首次调用这个代理对象的方法时(如 getItems()),代理对象才会触发真正的数据库查询。其关键流程如下:
Order)。order.items),返回的是MyBatis动态生成的代理对象。items.size()),代理对象拦截该调用。掌握配置是面试加分项!启用MyBatis延迟加载需要在全局配置文件 mybatis-config.xml 中进行设置:
<settings>
<!-- 启用全局延迟加载 -->
<setting name="lazyLoadingEnabled" value="true"/>
<!-- 积极加载改为按需加载 -->
<setting name="aggressiveLazyLoading" value="false"/>
<!-- 可选:设置哪些方法触发加载 -->
<setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
</settings>
lazyLoadingEnabled=true:开启延迟加载的总开关。aggressiveLazyLoading=false:避免加载一个关联对象就“顺带”加载所有关联对象,实现严格按需。lazyLoadTriggerMethods:指定哪些方法调用会触发延迟加载(默认为equals,clone,hashCode,toString)。在映射文件 <association> 或 <collection> 标签中,使用 fetchType="lazy" 显式指定该关联启用延迟加载:
<resultMap id="orderMap" type="Order">
<id property="id" column="id"/>
<collection property="items" column="id" ofType="Item"
select="com.example.mapper.ItemMapper.findByOrderId"
fetchType="lazy"/> <!-- 关键在这里 -->
</resultMap>
面试官常问:“延迟加载一定好吗?怎么用才最优?” 关键在于场景!它适合关联数据量大、访问频率低的场景。但也需注意:
SqlSession关闭前完成!使用OpenSessionInView模式可延长Session生命周期(常见于Web应用)。下图直观展示了延迟加载(按需查询)与立即加载(一次性JOIN)在查询次数上的对比:

面试官:“谈谈MyBatis的延迟加载,它的原理和可能的问题?”
你: “好的。MyBatis延迟加载的核心目的是优化性能,按需加载关联数据。它基于动态代理实现:当我们查询主对象时,关联对象返回的是代理。只有在调用这个代理对象的特定方法时,才会触发关联SQL查询。主要配置项是 lazyLoadingEnabled=true 和 aggressiveLazyLoading=false。需要注意N+1查询问题,特别是在循环中访问关联属性时,会多次请求数据库。解决思路是评估场景,如果确实需要批量数据,改用JOIN查询更高效。另外要确保操作在有效SqlSession内完成,避免序列化异常。”
再次强调,这份 2025年Java面试宝典 绝对是备战利器,里面系统梳理了MyBatis核心机制和常见面试题解析。
需要系统刷题、获取最新题库的同学看过来!面试鸭 提供了海量大厂真题和专项练习。通过 面试鸭返利网 购买面试鸭会员,可享25元独家返利! 省下的钱买杯咖啡继续刷题不香吗?点击下方直达返利通道:

理解并合理应用MyBatis延迟加载,能让你的应用更高效!用好它,既能在面试中侃侃而谈,也能在实际项目中写出更优雅的代码。返回首页 发现更多技术干货与优惠!
扫码联系我返利
(当前返利8元,金额随官方实际价格波动,最好提前咨询)

面试鸭小程序码

美团大额优惠券,给自己加个鸡腿吧!

今日有支付宝大红包赶快领,手慢无
支付宝扫码领取1-8元无门槛红包
