MyBatis 的懒加载原理

MyBatis 的懒加载是指在实际需要使用关联对象的数据时才去查询并加载这些数据。在MyBatis中,懒加载主要应用于关联查询的场景,比如一对一、一对多或多对多的关系。

懒加载的原理是在第一次执行查询时,并不立即加载所有关联的对象,而是返回一个代理(Proxy)对象。当真正访问关联对象的属性时,才会触发真正的查询并加载数据。这种方式可以提高性能,特别是在某些关联数据不常被访问的情况下。

MyBatis 中懒加载的实现通常涉及以下几个步骤:

  1. 配置懒加载:在 MyBatis 的配置文件 mybatis-config.xml 中开启懒加载以及相应的懒加载触发方法。例如,可以设置 lazyLoadingEnabledtrue 来启用懒加载,并设置 aggressiveLazyLoadingfalse 来防止在任何关联对象的属性被调用时就加载所有属性。

  2. 映射关联关系:在 Mapper XML 文件中配置关联关系,指定哪些属性需要懒加载。例如,在 <association><collection> 标签中使用 fetchType="lazy"

  3. 使用代理对象:MyBatis 使用 CGLIB 或 Javassist 等字节码增强技术创建关联对象的代理。当访问代理对象的方法时,代理逻辑会检查对应的数据是否已经加载。如果还没有加载,代理对象会执行实际的查询操作来加载数据。

  4. 触发懒加载:在执行业务代码时,当第一次访问代理对象的某个属性或方法时,MyBatis 会触发懒加载,执行必要的SQL查询并填充代理对象的数据。

  5. 加载数据:一旦触发懒加载,MyBatis 将调用相应的 Mapper 接口和 SQL 映射,执行数据库查询并获取数据。获取的数据随后填充到代理对象中,替换原来的懒加载占位。

  6. 缓存处理:MyBatis 也提供了缓存机制来避免重复加载同一数据。如果启用了二级缓存,那么在第一次懒加载后,数据将被缓存起来,之后的访问就不会再触发数据库查询。

懒加载是一种优化手段,它可以推迟数据加载的时间,减少不必要的数据库查询,从而提高应用程序的性能。然而,懒加载也可能导致 N+1 查询问题,如果不加以注意,可能会在遍历关联对象时产生大量的单独 SQL 查询。因此,使用懒加载时需要权衡利弊并谨慎设计关联查询的策略。



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

济南大飞哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值