理解延迟加载、立即加载
延迟加载:在真正使用数据的时候才发起查询,不用的时候不查询。也就是按需加载(懒加载),主要是针对于一对多,多对多关系
立即加载:不管用不用该数据,只要方法被调用,马上发起查询。主要是针对于一对一,多对一关系
启用延迟加载和按需加载
Mybatis配置文件中通过两个属性lazyLoadingEnabled和aggressiveLazyLoading来控制延迟加载和按需加载。
lazyLoadingEnabled:是否启用延迟加载,mybatis默认为false,不启用延迟加载。lazyLoadingEnabled属性控制全局是否使用延迟加载,特殊关联关系也可以通过嵌套查询中fetchType属性单独配置(fetchType属性值lazy或者eager)。
aggressiveLazyLoading:是否按需加载属性,默认值false,aggressiveLazyLoading属性启用时(即设置为true)只要加载对象,就会加载该对象的所有属性;关闭(即设置为false)该属性则会按需加载,即使用到某关联属性时,实时执行嵌套查询加载该属性。
aggressiveLazyLoading在mybatis版本<=3.4.1 默认值为true
configration.xml中修改配置,注册XXXMapper.xml
<mappers>
<!-- 注册Mapper.xml文件 -->
<mapper resource="mapper/XXXMapper.xml"></mapper>
</mappers>
<!-- 启用延迟加载特性,不配置默认关闭该特性-->
<setting name="lazyLoadingEnabled" value="true"></setting>
<!-- 按需加载: false:使用关联属性,及时加载; true,加载对象,则加载所有属性, -->
<setting name="aggressiveLazyLoading" value="false"/>
</settings>