Mybatis延迟加载原理和延迟加载配置详解

 更新时间:2023年10月27日 10:26:15   作者:爱穿背带裤的馫  
这篇文章主要介绍了Mybatis延迟加载原理和延迟加载配置详解,MyBatis中的延迟加载,也称为懒加载,是指在进行表的关联查询时,按照设置延迟规则推迟对关联对象的select查询,需要的朋友可以参考下

一、概念

MyBatis中的延迟加载,也称为懒加载,是指在进行表的关联查询时,按照设置延迟规则推迟对关联对象的select查询。例如在进行一对多查询的时候,只查询出一方,当程序中需要多方的数据时,mybatis再发出sql语句进行查询,这样子延迟加载就可以的减少数据库压力。MyBatis 的延迟加载只是对关联对象的查询有迟延设置,对于主加载对象都是直接执行查询语句的。

二、原理

MyBatis实现延迟加载的方式是使用代理对象,在访问未加载的数据时触发代理对象的方法,从而进行数据的加载。

三、延迟加载支持的对象

Mybatis 仅支持 association 关联对象和 collection 关联集合对象的延迟加载

  • association 指的就是一对一
  • collection 指的就是一对多查询

四、 配置延迟加载

1.配置全局延迟加载

	<!-- 在Mybatis的核⼼配置⽂件中可以使⽤setting标签修改全局的加载策略-->
	<settings>
		<!-- 打开延迟加载的开关 -->
		<setting name="lazyLoadingEnabled" value="true"/>
		<!--不是必要的标签   false 深入式延迟加载   true 侵入式延迟加载 -->
	 	<setting name="aggressiveLazyLoading" value="false"/>
	</settings>

侵入式延迟加载和深入式延迟加载的区别

class 与 student 之间是一对多关系,我们在加载时,可以先加载 class 数据,当需要使用到 student 数据时,我们再加载 student 的相关数据。

  • 侵入式延迟加载 侵入式延迟加载指的是只要主表的任一属性加载,就会触发延迟加载,比如:class 的 name 被加载,student 信息就会被触发加载。
  • 深度延迟加载 深度延迟加载指的是只有关联的从表信息被加载,延迟加载才会被触发。 通常,我们在实战中更倾向使用深度延迟加载。

2 配置局部延迟加载

<!--修改标签的fetchType属性 fetchType="lazy" 延迟加载策略 fetchType="eager" ⽴即加载策略-->
<resultMap id="kunkunMap" type="user">
    <id column="id" property="id"></id>
    <result column="ctrl" property="ctrl"></result>
    
    <!--开启⼀对多 延迟加载-->
    <collection property="userList" ofType="order" column="id"
        select="com.lagou.dao.OrderMapper.findByUid" fetchType="lazy">
    </collection>
    
    <!--开启⼀对一 延迟加载-->
	<association property="order" column="id" javaType="order"
        select="com.xinxin.dao.OrderMapper.findById" fetchType="lazy">
    </association>
</resultMap>

3.加载顺序

局部的加载策略的优先级高于全局的加载策略。

到此这篇关于Mybatis延迟加载原理和延迟加载配置详解的文章就介绍到这了,更多相关Mybatis延迟加载原理和配置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java获取当前时间的四种方法代码实例

    java获取当前时间的四种方法代码实例

    这篇文章主要介绍了java获取当前时间的四种方法代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • 关于后缀表达式的java实现过程

    关于后缀表达式的java实现过程

    这篇文章主要介绍了关于后缀表达式的java实现过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • SpringBoot实现自定义指标监控功能

    SpringBoot实现自定义指标监控功能

    本文主要介绍了SpringBoot实现自定义指标监控功能的实现,,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,感兴趣的小伙伴跟着着小编来一起来学习吧
    2024-01-01
  • Mybatis如何通过注解开启使用二级缓存

    Mybatis如何通过注解开启使用二级缓存

    这篇文章主要介绍了Mybatis基于注解开启使用二级缓存,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • SpringBoot简单的SpringBoot后端实例

    SpringBoot简单的SpringBoot后端实例

    这篇文章主要介绍了SpringBoot简单的SpringBoot后端实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • 基于SpringMVC入门案例及讲解

    基于SpringMVC入门案例及讲解

    这篇文章主要介绍了基于SpringMVC入门案例及讲解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • Spring BeanDefinition收集过程示例详解

    Spring BeanDefinition收集过程示例详解

    这篇文章主要为大家介绍了Spring BeanDefinition收集过程示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • idea中Java实体类怎样生成序列化的版本号的方法

    idea中Java实体类怎样生成序列化的版本号的方法

    这篇文章主要介绍了idea中Java实体类怎样生成序列化的版本号的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • 解决springboot 获取form-data里的file文件的问题

    解决springboot 获取form-data里的file文件的问题

    这篇文章主要介绍了解决springboot 获取form-data里的file文件的问题的相关资料,这里提供了详细的解决步骤,需要的朋友可以参考下
    2017-07-07
  • Java生成MD5加密字符串代码实例

    Java生成MD5加密字符串代码实例

    这篇文章主要介绍了Java生成MD5加密字符串代码实例,本文对MD5的作用作了一些介绍,然后给出了Java下生成MD5加密字符串的代码示例,需要的朋友可以参考下
    2015-06-06

最新评论