MyBatis 的延迟加载策略有几个?

MyBatis中的延迟加载主要有两种策略:

1. 对具体属性设置延迟加载

<association property="order" column="uid" 
     javaType="ITZhiMeiOrder" fetchType="lazy"/>

在需要用到该属性时,才会执行子查询。

2. 对整个对象设置延迟加载

<select id="findUser" resultType="lazy">
  select * from user
</select>

只有在真正使用对象时(调用属性 getter),才会执行主查询。

这两种策略的区别在于:

  • 对属性设置延迟加载,主查询不变。子查询延迟。
  • 对整个对象设置延迟加载,主查询也延迟。

这两种延迟加载策略各有优缺点:

属性延迟加载:

  • 精细控制:只延迟具体属性加载
  • 主查询效率高

对象延迟加载:

  • 简单直观
  • 主查询也延迟,效率低一些

通常推荐在具体场景选择使用:

  • 对 frequently-used属性,推荐属性延迟加载。
  • 对 Occasionally-used 的属性,推荐对象延迟加载。

总的来说,MyBatis中的延迟加载提供两种策略:属性延迟加载 和 对象延迟加载。
根据不同的需要二者是可结合使用的。