MyBaits延迟加载失效解决之道

遇到现象

  1. 延迟加载不起作用
  2. 调用查到对象的toString()方法触发延迟加载

解决办法

  1. 延迟加载不起作用的解决办法
    在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

  2. 调用查到对象的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>

你可能感兴趣的:(MyBaits延迟加载失效解决之道)