mybatis的延迟加载

<settings>  

   <setting name="lazyLoadingEnabled" value="true"/>  

    <setting name="aggressiveLazyLoading" value="false"/> 

<setting name="lazyLoadTriggerMethods" value="true"/> 

</settings>  

 

aggressiveLazyLoading:这个参数的含义是,当该参数设置为true时,对任意延迟属性的调用会使带有延迟加载属性的对象完整加载,反之,每种属性都将按需加载。当我们从数据库中查询到数据后会给实体类中关联对象赋值,会调用关联对象属性的setter方法,这会触发上述规则,导致本该延迟加载的属性直接加载,为了避免这种情况,需要将其设置为false。

lazyLoadingEnabled这个属性是开启全局延迟加载,不用手动在单个关联中配置。

lazyLoadTriggerMethods这个参数的含义是当调用配置中的方法时,加载全部的延迟加载数据。默认值是“equals,clone,hashCode,toString”。

延迟加载有时候会取不到值的问题:mybatis延迟加载时通过动态代理实现的,当调用配置为延迟加载的属性方法时,动态代理的操作会被触发,这些额外的操作就是通过mybatis的sqlSession去执行嵌套的SQL的。由于在和某些框架集成时,sqlSession的生命周期交给了框架来管理,因此当对象超出sqlsession生命周期调用时,会由于链接关闭等问题而抛出异常。在和spring集成时,要确保只能在Service层调用延迟加载的属性。当结果从service层返回至Controller层时,如果获取延迟加载的属性值,会因为sqlsession已经关闭而抛出异常。


猜你喜欢

转载自blog.csdn.net/qq_34627002/article/details/80777046
今日推荐