MyBatis中的延迟加载是指,只有在需要使用对象的属性时,才去执行查询操作。
它的实现方式是:
- 在映射文件中,将属性配置为延迟加载。
<association property="address"
column="aid"
javaType="com.itzhimei.Address"
select="selectAddressById"
fetchType="lazy"/>
这里的 fetchType=”lazy” 就表示延时加载。
- 当调用对象的属性时,MyBatis 才会执行查询。
User user = userMapper.getUserById(1);
String city = user.getAddress().getCity();
// 此时才会执行查询地址信息
- Mybatis 会触发 selectAddressById 这个查询,查询地址信息。
延迟加载的好处:
- 当不需要子属性时,可以避免无效的查询。提高效率。
- 可以避免查询出过多的结果集对象。
- 对于庞大的复杂对象,可逐步加载相关属性,减少内存占用。
上述都是基于 Mybatis 一级缓存实现的。
二级缓存需要注意:
- 延迟加载的属性不会被二级缓存;
- 需要显式加载延迟加载的属性,才会进入二级缓存。