Mybatis延迟加载的实现方式

 更新时间:2019年10月24日 17:02:47   作者:关耳er  
这篇文章主要介绍了Mybatis延迟加载的实现方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

1、概念:

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

2、加载时机:

直接加载:执行完对主加载对象的 select 语句,马上执行对关联对象的 select 查询。侵入式延迟: 执行对主加载对象的查询时,不会执行对关联对象的查询。但当要访问主加载对象的详情属性时,就会马上执行关联对象的select查询。深度延迟: 执行对主加载对象的查询时,不会执行对关联对象的查询。访问主加载对象的详情时也不会执行关联对象的select查询。只有当真正访问关联对象的详情时,才会执行对关联对象的 select 查询。

注意:延迟加载的应用要求:关联对象的查询与主加载对象的查询必须是分别进行的select语句,不能是使用多表连接所进行的select查询。因为,多表连接查询,实质是对一张表的查询,对由多个表连接后形成的一张表的查询。会一次性将多张表的所有信息查询出来。

3、侵入式延迟加载:

①、Mybatis-config.xml大配置文件,首先开启延迟加载,然后再配置侵入式加载

<!--开启延迟加载-->
    <setting name="lazyLoadingEnabled" value="true"/>
    <!--配置侵入式延迟加载   默认为false(深度加载)
      侵入式:默认只会执行主加载SQL,那么当访问主加载对象的详细信息时才会执行关联对象的SQL查询
      深度延迟:默认只执行主加载SQL,那么当调用到主加载对象中关联对象的信息时才会执行关联对象的SQL查询
    -->
    <setting name="aggressiveLazyLoading" value="true"/>

②、不调用主加载对象时只有一条SQL

③、调用主加载对象的信息时会产生两条SQL

4、深入式延迟加载:

①、Mybatis-config.xml大配置文件,首先开启延迟加载,然后再配置深度加载

<!--开启延迟加载-->
    <setting name="lazyLoadingEnabled" value="true"/>
    <!--配置侵入式延迟加载   默认为false(深度加载)
      侵入式:默认只会执行主加载SQL,那么当访问主加载对象的详细信息时才会执行关联对象的SQL查询
      深度延迟:默认只执行主加载SQL,那么当调用到主加载对象中关联对象的信息时才会执行关联对象的SQL查询
    -->
    <setting name="aggressiveLazyLoading" value="false"/>

②、调用主加载对象时不会执行第二条加载SQL

③、调用关联对象详细信息时会执行第二次查询

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Java图形化编程之JFrame疫苗接种系统详解

    Java图形化编程之JFrame疫苗接种系统详解

    GUI图形界面设计是用户和程序交互的工具,用户通过图形界面控制程序事件的发生。首先介绍Swing的基本体系结构,这是底层
    2021-09-09
  • java 中数组初始化实例详解

    java 中数组初始化实例详解

    这篇文章主要介绍了 本文主要讲数组的初始化方法、可变参数列表以及可变参数列表对函数重载的影响的相关资料,需要的朋友可以参考下
    2017-05-05
  • java必学必会之this关键字

    java必学必会之this关键字

    java必学必会之this关键字,java中this的用法进行了详细的分析介绍,感兴趣的小伙伴们可以参考一下
    2015-12-12
  • MyBatis XML方式的基本用法之多表查询功能的示例代码

    MyBatis XML方式的基本用法之多表查询功能的示例代码

    这篇文章主要介绍了MyBatis XML方式的基本用法之多表查询功能的示例代码,本文通过示例文字相结合的形式给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-07-07
  • 如何使用IDEA2022.1 创建Spring Boot项目

    如何使用IDEA2022.1 创建Spring Boot项目

    这篇文章主要介绍了如何使用IDEA2022.1 创建Spring Boot项目,大家在使用idea开发工具时发现给以往的版本略微的不同,细心的小编在此记录下,需要的朋友可以参考下
    2022-08-08
  • Java中的cglib原理解析

    Java中的cglib原理解析

    这篇文章主要介绍了Java中的cglib原理解析,由于代理类继承了被代理类,所以调用sayHello()方法时会直接调用代理类的sayHello()方法,而在代理类的方法中,调用了Callback的逻辑,需要的朋友可以参考下
    2023-10-10
  • java循环删除List元素报错的原因分析与解决

    java循环删除List元素报错的原因分析与解决

    大家在工作中应该都会遇到从List集合中删除某一个或多个元素的业务场景,相信大家都会避开在循环里面删除元素,使用其他方式处理,这是为什么呢,下面小编就来和大家详细聊聊
    2023-11-11
  • Java使用DateFormatter格式化日期时间的方法示例

    Java使用DateFormatter格式化日期时间的方法示例

    这篇文章主要介绍了Java使用DateFormatter格式化日期时间的方法,结合具体实例分析了java使用DateFormatter格式化日期时间的相关操作技巧,需要的朋友可以参考下
    2017-04-04
  • SpringBoot3通过GraalVM生成exe执行文件问题

    SpringBoot3通过GraalVM生成exe执行文件问题

    文章介绍了如何安装GraalVM和Visual Studio,并通过Spring Boot项目将Java应用程序封装成可执行文件(.exe)
    2024-12-12
  • 使用 Redis 缓存实现点赞和取消点赞的示例代码

    使用 Redis 缓存实现点赞和取消点赞的示例代码

    这篇文章主要介绍了使用 Redis 缓存实现点赞和取消点赞的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03

最新评论