16. MyBatis的耽误加载机制是什么?怎样配置?有哪些优缺点? ...

打印 上一主题 下一主题

主题 546|帖子 546|积分 1638



耽误加载(Lazy Loading)是MyBatis提供的一种机制,用于优化数据库查询性能。在启用耽误加载时,某些关联对象或集合只有在被实际访问时才会触发数据库查询,而不是在主对象加载时立刻加载。这种机制可以镌汰不必要的数据库查询,特别是在处理多表关联关系时非常有用。


耽误加载的配置

在MyBatis中,耽误加载可以通过配置文件中的设置来启用。重要有以下几个步骤:


1. 启用全局耽误加载

在MyBatis的全局配置中,通过lazyLoadingEnabled属性来启用耽误加载。
  1. <configuration>
  2.    <settings>
  3.        <!-- 启用延迟加载 -->
  4.        <setting name="lazyLoadingEnabled" value="true"/>
  5.        <!-- 启用全局的关联对象延迟加载 -->
  6.        <setting name="aggressiveLazyLoading" value="false"/>
  7.    </settings>
  8. </configuration>
复制代码


  • lazyLoadingEnabled:设置为true时,开启全局的耽误加载功能。假如设置为false,则耽误加载功能将被关闭,全部关联对象都会被立刻加载。
  • aggressiveLazyLoading:设置为true时,MyBatis会立刻加载全部耽误加载的属性;设置为false时,MyBatis只在真正访问关联对象或集合时才加载。


2. 在resultMap中配置耽误加载

通过在resultMap中配置<association>或<collection>标签的fetchType属性来控制具体的耽误加载行为。
  1. <resultMap id="userResultMap" type="User">
  2.    <id property="id" column="id"/>
  3.    <result property="username" column="username"/>
  4.    <!-- 一对一关联的延迟加载 -->
  5.    <association property="address" column="address_id"
  6.                 javaType="Address" select="selectAddressById" fetchType="lazy"/>
  7.    <!-- 一对多关联的延迟加载 -->
  8.    <collection property="orders" ofType="Order"
  9.                select="selectOrdersByUserId" fetchType="lazy"/>
  10. </resultMap>
复制代码


  • fetchType="lazy":表现这个关联关系将使用耽误加载。只有在访问address或orders属性时,MyBatis才会实行对应的SQL查询。
  • fetchType="eager":表现这个关联关系会立刻加载。无论是否访问address或orders属性,对应的SQL查询都会在主对象加载时立刻实行。


耽误加载的优缺点



优点


  • 镌汰数据库访问:耽误加载可以避免不必要的数据库查询,尤其在关联对象较多且有些关联对象不必要被立刻访问的情况下,可以明显镌汰数据库的访问次数。
  • 进步性能:通过耽误加载,只有在真正必要时才加载数据,镌汰了系统的资源消耗,提升了应用步伐的相应速率。
  • 按需加载数据:耽误加载使得步伐可以在必要时才获取数据,提供了更机动的数据加载策略,有助于处理大型和复杂的对象图。


缺点


  • N+1查询题目:假如没有仔细设计,耽误加载可能导致N+1查询题目,即主对象查询一次,关联对象各自查询N次,从而增加了数据库的负担。
  • 复杂性增加:使用耽误加载会增加系统的复杂性,开发职员必要更好地理解何时会触发数据库查询,并避免不必要的耽误加载造成的性能瓶颈。
  • 调试困难:由于查询是在对象被访问时才触发的,调试过程中可能会出现意料之外的数据库访问,增加 了定位题目的难度。


总结

MyBatis的耽误加载机制通过在必要时才加载关联数据,可以有用镌汰不必要的数据库访问和资源消耗,从而提升性能。配置耽误加载通常涉及全局配置和resultMap中的fetchType设置。


  • 启用方式:通过lazyLoadingEnabled和fetchType属性来配置。
  • 优点:镌汰数据库查询、进步性能、按需加载数据。
  • 缺点:可能导致N+1查询题目、增加系统复杂性、调试困难。
在实际应用中,耽误加载可以帮助优化数据库访问,但也必要仔细设计和测试,以避免潜伏的性能题目。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

欢乐狗

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表