mybatis中的延迟加载,也称为懒加载,是指进行关联查询时,按需执行子查询。
当程序需要获取|使用关联对象时,mybatis再执行子查询,这样可以减轻数据库的压力。
懒加载的适用场景:
当前业务只使用主加载对象的其他属性,或者暂时只使用主加载对象的其他属性,长时间以后才使用主加载对象的关联对象属性。
懒加载只对关联查询起作用(一对一、一对多、多对多),且只对嵌套查询方式起作用,因为嵌套结果、扩展类的方式都是一次查询所需数据,不存在子查询,也就不存在延迟加载的情况。
mybatis的延迟加载只是延迟执行子查询,对于主加载对象的查询都是直接执行的。
一共有三种:
懒加载一共有2种方式,按照懒的程度,分为侵入式延迟、深度延迟。
可在全局配置文件中进行配置,也可以在映射文件中进行配置。
默认就是直接加载,什么都不用配置,当然也可以显式配置:
<settings> <setting name="lazyloadingenabled" value="false"/> </settings>
<settings> <!-- 使用懒加载 --> <setting name="lazyloadingenabled" value="true"/> <!-- 使用侵入式延迟的懒加载 --> <setting name="aggressivelazyloading" value="true"/> </settings>
aggressive 咄咄逼人的、激进的、主动模式的、喜好侵入的,一有机会就加载,故名侵入式延迟。
缺省aggressivelazyloading时,默认为true——侵入式延迟。(据说旧版本的默认值是false——深度延迟,我未去验证。)
<settings> <!-- 使用懒加载 --> <setting name="lazyloadingenabled" value="true"/> <!-- 使用深度延迟的懒加载 --> <setting name="aggressivelazyloading" value="false"/> </settings>
<collection property="goodslist" select="com.chy.mapper.goodsmapper.querygoodsbygoodsid" column="no" oftype="goods" fetchtype="lazy"/>
有2个可选的值:
此种方式不能指定为侵入式延迟。
在全局配置文件中进行的配置是配置所有的,在映射文件中的配置是配置单个的。
如果在mybatis全局配置文件中显式配置了懒加载,又在映射文件中配置了懒加载,冲突时以全局配置文件中的配置为准。
如对本文有疑问, 点击进行留言回复!!
如何在IDEA中对 hashCode()和 equals() 利用快捷键快速进行方法重写
springboot集成普罗米修斯(Prometheus)的方法
Tomcat启动springboot项目war包报错:启动子级时出错的问题
如何利用Spring的@Import扩展点与spring进行无缝整合
网友评论