mybatis中使用延迟加载的配置

众所周知,我们在使用mybatis嵌套查询的时候,如果嵌套查询过多的,立即加载会给数据库带来很大的负担,这时就需要使用延迟加载。

但是单纯的在关联查询上配置fetchType=true在很多时候是不可行的,还需要在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已经关闭而抛出异常。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值