遇到现象
- 延迟加载不起作用
- 调用查到对象的toString()方法触发延迟加载
解决办法
- 延迟加载不起作用的解决办法
在MyBaits的configuration xml文件中的configuration植物中增加以下配置:
<settings>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="aggressiveLazyLoading" value="false"/>
</settings>
lazyLoadingEnabled
此属性控制是否启用延迟加载功能,是全局配置,默认值为false,要想在项目中启用延迟加载功能,需要将这个属性设置为true。
aggressiveLazyLoading
此属性控制触发延迟加载属性的方式,是全局配置,默认值为true,表示只要有一个延迟加载的属性被使用,所有延迟加载的属性都会加载;false表示按需要加载。
关于以上2个属性的详细说明请看MyBaits的官方文档:MyBatis - MyBatis 3 | Configuration
- 调用查到对象的toString()方法触发延迟加载的解决办法
引起这个问题的根本原因是settings的lazyLoadTriggerMethods属性,MyBaits对Object的部分方法做了特殊处理,默认情况下当调用到equals,clone,hashCode,toString这4个方法时会触发延迟加载;可以通过在setting中增加<setting name="lazyLoadTriggerMethods" value=""/>来禁用这个特性。
解决以上2个问题的完整的setting配置如下:
<settings>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="aggressiveLazyLoading" value="false"/>
<setting name="lazyLoadTriggerMethods" value=""/>
</settings>