Mybatis延迟加载的实现方式

作者:关耳er 时间:2023-08-19 11:07:32 

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

Mybatis延迟加载的实现方式

Mybatis延迟加载的实现方式

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

Mybatis延迟加载的实现方式

Mybatis延迟加载的实现方式

4、深入式延迟加载:

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


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

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

Mybatis延迟加载的实现方式

Mybatis延迟加载的实现方式

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

Mybatis延迟加载的实现方式

Mybatis延迟加载的实现方式

来源:https://www.cnblogs.com/Zzzzn/p/11671619.html

标签:mybatis,延迟,加载
0
投稿

猜你喜欢

  • android自定义View实现简单五子棋游戏

    2022-09-16 14:52:30
  • Java 面向对象和封装全面梳理总结

    2023-10-16 08:20:27
  • LINQ基础之Intersect、Except和Distinct子句

    2022-01-19 00:46:13
  • c# 遍历 Dictionary的四种方式

    2023-04-17 13:11:10
  • 详解context root修改无效web修改项目路径(eclipse)

    2022-08-04 13:08:46
  • JMeter中的后端监听器的实现

    2022-07-24 17:58:35
  • Android Wear计时器开发

    2023-04-10 01:22:21
  • Android编程设计模式之中介者模式详解

    2022-04-05 21:13:03
  • Java 匿名内部类详解及实例代码

    2021-09-13 13:03:34
  • c# socket编程udp客户端实现代码分享

    2023-06-16 05:03:31
  • Android实现ListView分页加载数据

    2023-11-09 10:05:45
  • Java截取字符串的几种方法示例

    2023-11-29 12:36:32
  • Spring实战之Bean的作用域singleton和prototype用法分析

    2023-03-23 20:48:37
  • Java多线程 volatile关键字详解

    2023-07-16 02:13:31
  • Java实现动态模拟时钟

    2022-07-25 17:35:25
  • Java读写文件,在文件中搜索内容,并输出含有该内容的所有行方式

    2022-12-14 18:23:58
  • Java concurrency集合之LinkedBlockingDeque_动力节点Java学院整理

    2022-12-06 12:28:38
  • Android 按后退键退出Android程序的实现方法

    2023-06-16 20:08:02
  • MyBatis Xml映射文件之字符串替换方式

    2022-03-23 00:06:39
  • springboot日期转换器实现实例解析

    2023-01-31 13:16:45
  • asp之家 软件编程 m.aspxhome.com