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中的延迟加载提供两种策略:属性延迟加载 和 对象延迟加载。
根据不同的需要二者是可结合使用的。