mybatis延迟加载的三种加载方式深入,你get了吗?

就让文谦先行      2022-04-18     614

关键词:

延迟加载

  延迟加载对主对象都是直接加载,只有对关联对象是延迟加载。

  延迟加载可以减轻数据库的压力,

  延迟加载不可是一条SQL查询多表信息,这样构不成延迟加载,会形成直接加载。

  延迟加载分为三种类型:

1.直接加载

执行完主对象之后,直接执行关联对象。

2.侵入式加载

在执行主对象详情的时候,执行关联对象。

3.深度延迟加载

执行完主对象或主对象详情不会执行关联对象,只有用到关联对象数据的时候才走深度延迟加载。

  延迟加载默认情况下是关闭状态(false) 延迟加载下的侵入式加载默认情况下是开启状态(true)  在这种情况下延迟加载不生效, 比如说延迟加载是一个大的水龙头总闸,如果总闸没开,那么总闸里面的小的闸肯定没有水。如果想要使用延迟加载必须写成true

  现在知道延迟加载的状态,那他是在哪里设置开启关闭状态的呢? 答案是在大配置文件中设置延迟加载的状态

看一下几个例子

1.默认情况的延迟加载  (这是在MyBatis3.4.1版本之前的默认情况) :(aggressiveLazyLoading)侵入式延迟加载为true, 在3.4.1之后的版本(aggressiveLazyLoading)侵入式延迟加载默认值为false

 

  2.侵入式延迟加载

 

现在看一下访问主属性的侵入式延迟加载的状态如何

 

   3.深度延迟加载

深度延迟加载 大配置中的设置

只访问主对象的属性,深度延迟加载的状态为:

 

现在我们看一下访问关联对象的属性,深度延迟加载的状态为:

 

在大配置文件设置延迟加载是使用的是setting节点,与其他节点位置顺序不要乱。

大配置中的延迟加载代码:

<settings>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="aggressiveLazyLoading" value="false"/> <!--现在的状态为深度延迟加载-->
</settings>
<settings>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="aggressiveLazyLoading" value="true"/> <!--现在的状态为侵入式延迟加载-->
</settings>

<settings>
<setting name="lazyLoadingEnabled" value="false"/>
<setting name="aggressiveLazyLoading" value="false"/> <!--现在的状态为直接加载-->(3.4.1版本之后的直接加载设置)
</settings>

<settings>
<setting name="lazyLoadingEnabled" value="false"/>
<setting name="aggressiveLazyLoading" value="true"/> <!--现在的状态为直接加载-->(3.4.1版本之前的直接加载设置)
</settings>
 

 

ef的三种数据加载方式(代码片段)

...ng,EagerLoading,ExplicitLoading,其中LazyLoading和ExplicitLoading都是延迟加载。(一)延迟加载(默认):LazyLoading使用的是动态代理,默认情况下,如果POCO类满足以下两个条件,EF就使用LazyLoading:POCO类是Public且不为Sealed。导航属性标记为... 查看详情

ef的三种数据加载方式

EF中有3种数据加载方式,具体如下:延迟加载(默认): 设置导航属性为virtual贪婪加载:不设置导航属性为virtual,并且对导航属性使用Include显示加载:不设置导航属性为virtual,并且对导航属性使用Reference(单个对象).Load()... 查看详情

js异步加载的三种方式

  js加载的缺点:加载工具方法没必要阻塞文档,过得js加载会影响页面效率,一旦网速不好,那么整个网站将等待js加载而不进行后续渲染等工作。有些工具方法需要按需加载,用到再加载,不用不加载,。  默认正常模式... 查看详情

js异步加载的三种方式

一、同步加载  我们平时使用的最多的一种方式。<scriptsrc="http://yourdomain.com/script.js"></script><scriptsrc="http://yourdomain.com/script.js"></script>  同步模式,又称阻塞模式,会阻止浏览器的后续处理,停止后续的解析... 查看详情

图解script的三种加载方式异步加载顺序

...fer="defer">:脚本的获取是异步的,执行是同步的。脚本加载不阻塞页面的解析,脚本在获取完后并不立即执行,而是等到DOMready之后才开始执行。<scriptasync="async">:脚本的获取是异步的,执行是同步的。但是和< 查看详情

类加载的三种方式比较(代码片段)

虚拟机加载类的途径1、由new关键字创建一个类的实例在由运行时刻用new方法载入如:Dogdog=newDog();2、调用Class.forName()方法通过反射加载类型,并创建对象实例如:Classclazz=Class.forName(“Dog”);Objectdog=clazz.newInstan... 查看详情

spring加载properties配置文件的三种方式

一、通过context:property-placeholder标签实现配置文件加载1)用法:1、在spring.xml配置文件中添加标签<context:property-placeholderignore-unresolvable="true"location="classpath:redis-key.properties"/>2、在spring.xml中使用配置文件属性:$< 查看详情

11.延迟加载

延迟加载  MyBatis中的延迟加载,也称为懒加载,是指在进行关联查询时,按照设置延迟规则推迟对关联对象的 select查询。延迟加载可以有效的减少数据库压力。 需要注意的是,MyBatis的延迟加载只是对关联对象的查询有... 查看详情

mybatis_延迟加载

延迟加载所谓的mybatis延迟加载,指的是当进行多个表之间的关联查询时,先从单表中进行查询,按照一定的设计规则,需要时再对该表所关联的表单继续进行查询好比如在某个购物网站上填写收货地址时,先加载省份,等用户... 查看详情

使用javascript判断图片是否加载完成的三种实现方式

有时需要获取图片的尺寸,这需要在图片加载完成以后才可以。有三种方式实现,下面一一介绍。一、load事件 <!DOCTYPEHTML><html><head><metacharset="utf-8"><title>img-loadevent</title></head><body><img 查看详情

mybatis查询延迟加载

Mybatis查询延迟加载 1.1     启用延迟加载      Mybatis的延迟加载是针对嵌套查询而言的,是指在进行查询的时候先只查询最外层的SQL,对于内层SQL将在需要使用的时候才查询出来。Mybatis的延迟加载默认是关闭的ÿ... 查看详情

hive分区表与数据产生关联的三种方式

...calinpath"数据路径"intotabletable_namepartition(分区字段)使用load加载数据会自动创建分区的,这样你加载的数据就会和分区表进行关联,之后select就可以了 2.修复命令这种方式是先使用hive创建分区目录,然后用put上传数据,最后使用msckr... 查看详情

线程的三种创建方式你get了吗?(代码片段)

备战2022春招或暑期实习,祝大家每天进步亿点点!Java并发编程Day4本篇总结的是如何在Java中避免创建不必要的对象,后续会每日更新~关于《我们一起学Redis》、《我们一起学HarmonyOS》等知识点可以查看我的往期博客... 查看详情

mybatis:mybatis的三种使用方式

注意,这篇文章只介绍mybatis单独使用时如何操作,是没有用到spring的,如果需要了解mybatis和spring如何搭建,请移步这里Mybatis(六):spring与mybatis三种整合方法。方式一:不使用mapper接口步骤1.pom文件里添加jar包<dependency><gro... 查看详情

mybatis应用开发(16)延迟加载之概念

...加载子表到关联的从属JavaBean中。 使用嵌套查询时,MyBatis支持延迟加载功能。 MyBatis提供了2种方式控制延迟 查看详情

getline数据来源你的三种方式

(1)getline从交互式的用户输入中c中获取内容; #awk‘BEGIN{system("echo"Inputyourname:"");getlined;print" Yournameis",d"! "}‘Inputyourname:berryYournameisberry!#awk‘BEGIN{system("echo"Inputyourname:\c"");get 查看详情

hibernate延迟加载(get和load的区别)

概要:在hibernate中我们知道如果要从数据库中得到一个对象,通常有两种方式,一种是通过session.get()方法,另一种就是通过session.load()方法,然后其实这两种方法在获得一个实体对象时是有区别的,在查询性能上两者是不同的。... 查看详情

mybatis学习四mybatis的三种查询方式

<selectid="selAll"resultType="com.caopeng.pojo.Flower">select*fromflower</select><selectid="selCount"resultType="int">selectcount(*)fromflower</select><selectid="selMap"resu 查看详情