最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mybatis查詢時(shí)的延遲加載解析

 更新時(shí)間:2023年10月27日 11:10:58   作者:Forrit  
這篇文章主要介紹了Mybatis查詢時(shí)的延遲加載解析,先從單表查詢,需要時(shí)再?gòu)年P(guān)聯(lián)表去關(guān)聯(lián)查詢,能大大提高數(shù)據(jù)庫(kù)性能,因?yàn)椴樵儐伪硪汝P(guān)聯(lián)查詢多張表速度要快,延遲加載分為兩種:深度延時(shí)加載,侵入式延遲加載,需要的朋友可以參考下

Mybatis延遲加載

什么是延遲加載呢?

通俗的講就是按需加載,我們需要什么的時(shí)候再去進(jìn)行什么操作。

什么時(shí)候會(huì)用到延遲加載呢?

多表單獨(dú)查詢的時(shí)候。

而且先從單表查詢,需要時(shí)再?gòu)年P(guān)聯(lián)表去關(guān)聯(lián)查詢,能大大提高數(shù)據(jù)庫(kù)性能,因?yàn)椴樵儐伪硪汝P(guān)聯(lián)查詢多張表速度要快。 延遲加載分為兩種:深度延時(shí)加載,侵入式延遲加載

如何開啟延時(shí)加載?

兩種方法:

1.在collection標(biāo)簽中:

  <select id="selectByMinorId"  resultMap="selectMinorMap">
        select cid,cname from country where cid =#{id}
  </select>
    
    <resultMap id="selectMinorMap" type="Country">
        <id column="cid" property="cid"/>
        <result column="cname" property="cname"/>
        <collection column="cid" property="mino" ofType="Minor" select="selectByMinorIds" fetchType="lazy"/>
				//使用fetch屬性的值為true,默認(rèn)開啟深度延遲加載
    </resultMap>
    
    <select id="selectByMinorIds" resultType="com.example.mytest01.pojo.Minor" >
    	select mname from minor where countryid =#{cid}
	</select>

2.mybatis.xml中進(jìn)行配置

<settings>

<!--延遲加載總開關(guān),打開后,默認(rèn)的是深度延時(shí)加載 -->
<setting name="lazyLoadingEnabled" value="true" />

<!--侵入式延遲加載開關(guān) -->
<!--3.4.1版本之前默認(rèn)是true,之后默認(rèn)是false -->
<setting name="aggressiveLazyLoading" value="true" />

</settings>

加載特點(diǎn)

侵入式延遲: 執(zhí)行對(duì)主加載對(duì)象的查詢時(shí),不會(huì)執(zhí)行對(duì)關(guān)聯(lián)對(duì)象的查詢。但當(dāng)要訪問主加載對(duì)象的詳情屬性時(shí),就會(huì)馬上執(zhí)行關(guān)聯(lián)對(duì)象的select查詢。

深度延遲: 執(zhí)行對(duì)主加載對(duì)象的查詢時(shí),不會(huì)執(zhí)行對(duì)關(guān)聯(lián)對(duì)象的查詢。訪問主加載對(duì)象的詳情時(shí)也不會(huì)執(zhí)行關(guān)聯(lián)對(duì)象的select查詢。只有當(dāng)真正訪問關(guān)聯(lián)對(duì)象的詳情時(shí),才會(huì)執(zhí)行對(duì)關(guān)聯(lián)對(duì)象的 select 查詢。

MyBatis 的延遲加載只是對(duì)關(guān)聯(lián)對(duì)象的查詢有遲延設(shè)置,對(duì)于主加載對(duì)象都是直接執(zhí)行查詢語(yǔ)句的。

舉例: mapper.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace:填寫映射當(dāng)前的Mapper接口,所有的增刪改查的參數(shù)和返回值類型,
		就可以直接填寫縮寫,不區(qū)分大小寫,直接通過方法名去找類型-->
<mapper namespace="com.example.mytest01.dao.IMinorDao">


    <select id="selectByMinorId"  resultMap="selectMinorMap">
        select cid,cname from country where cid =#{id}
    </select>
    <resultMap id="selectMinorMap" type="Country">
        <id column="cid" property="cid"/>
        <result column="cname" property="cname"/>
        <collection column="cid" property="mino" ofType="Minor" select="selectByMinorIds"/>

    </resultMap>
    <select id="selectByMinorIds" resultType="com.example.mytest01.pojo.Minor" >
    select mname from minor where countryid =#{cid}
</select>
</mapper>

當(dāng)不開啟延遲加載時(shí):

@Autowired
private IMinorDao m;
 @Test
    void hah(){
      Country c =m.selectByMinorId(1);
      //System.out.println(c.getCname());
  }

在這里插入圖片描述

進(jìn)行兩次查詢;

@Autowired
private IMinorDao m;
 @Test
    void hah(){
      //Country c =m.selectByMinorId(1);
      System.out.println(c.getCname());
  }

在這里插入圖片描述

進(jìn)行兩次查詢;

重點(diǎn)來了: 當(dāng)開深度啟延遲加載時(shí):

@Autowired
private IMinorDao m;
 @Test
    void hah(){
      Country c =m.selectByMinorId(1);
      //System.out.println(c.getCname());
  }

在這里插入圖片描述

通過日志觀察到,只查詢一次,還未進(jìn)行第二次查詢;

@Autowired
private IMinorDao m;
 @Test
    void hah(){
      //Country c =m.selectByMinorId(1);
      System.out.println(c.getCname());
  }

在這里插入圖片描述

當(dāng)查詢主加載對(duì)象的詳情屬性時(shí),依舊只進(jìn)行了第一次的查詢; .

@Autowired
private IMinorDao m;
 @Test
    void hah(){
      //Country c =m.selectByMinorId(1);
      //System.out.println(c.getCname());
      System.out.println(c.getMino());
  }

在這里插入圖片描述

看到這里我們會(huì)發(fā)現(xiàn):只有當(dāng)查詢主加載對(duì)象的關(guān)聯(lián)屬性時(shí),才進(jìn)行了兩次查詢

當(dāng)開啟侵入式延遲加載時(shí):

@Autowired
private IMinorDao m;
 @Test
    void hah(){
      Country c =m.selectByMinorId(1);
      //System.out.println(c.getCname());
  }

在這里插入圖片描述

通過日志觀察到,只查詢一次,還未進(jìn)行第二次查詢;

@Autowired
private IMinorDao m;
 @Test
    void hah(){
      //Country c =m.selectByMinorId(1);
      System.out.println(c.getCname());
  }

在這里插入圖片描述

與深度延遲加載不同的時(shí):當(dāng)查詢主屬性的詳細(xì)信息時(shí),Mybatis就已經(jīng)進(jìn)行了第二次的關(guān)聯(lián)屬性的查詢;

到此這篇關(guān)于Mybatis查詢時(shí)的延遲加載解析的文章就介紹到這了,更多相關(guān)Mybatis延遲加載內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 關(guān)于Springboot2.x集成lettuce連接redis集群報(bào)超時(shí)異常Command timed out after 6 second(s)

    關(guān)于Springboot2.x集成lettuce連接redis集群報(bào)超時(shí)異常Command timed out afte

    這篇文章主要介紹了Springboot2.x集成lettuce連接redis集群報(bào)超時(shí)異常Command timed out after 6 second(s),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-03-03
  • Java Map集合用法詳解

    Java Map集合用法詳解

    Map用于保存具有映射關(guān)系的數(shù)據(jù),Map集合里保存著兩組值,一組用于保存Map的ley,另一組保存著Map的value;Map集合和查字典類似,通過key找到對(duì)應(yīng)的value,通過頁(yè)數(shù)找到對(duì)應(yīng)的信息。用學(xué)生類來說,key相當(dāng)于學(xué)號(hào),value對(duì)應(yīng)name,age,sex等信息。用這種對(duì)應(yīng)關(guān)系方便查找
    2021-10-10
  • 修改jvm-sandbox源碼導(dǎo)致線程安全分析

    修改jvm-sandbox源碼導(dǎo)致線程安全分析

    這篇文章主要為大家介紹了修改jvm-sandbox源碼導(dǎo)致線程安全分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • springboot結(jié)合maven配置不同環(huán)境的profile方式

    springboot結(jié)合maven配置不同環(huán)境的profile方式

    這篇文章主要介紹了springboot結(jié)合maven配置不同環(huán)境的profile方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • 如何優(yōu)雅的進(jìn)行Spring整合MongoDB詳解

    如何優(yōu)雅的進(jìn)行Spring整合MongoDB詳解

    這篇文章主要給大家介紹了如何優(yōu)雅的進(jìn)行Spring整合MongoDB的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-02-02
  • Java實(shí)現(xiàn)curl調(diào)用帶參數(shù)接口方法

    Java實(shí)現(xiàn)curl調(diào)用帶參數(shù)接口方法

    本文主要介紹了Java實(shí)現(xiàn)curl調(diào)用帶參數(shù)接口方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-04-04
  • 詳解spring mvc4使用及json 日期轉(zhuǎn)換解決方案

    詳解spring mvc4使用及json 日期轉(zhuǎn)換解決方案

    本篇文章主要介紹了spring mvc4使用及json 日期轉(zhuǎn)換解決方案,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-01-01
  • java操作ElasticSearch聚合查詢的示例代碼

    java操作ElasticSearch聚合查詢的示例代碼

    這篇文章主要介紹了java操作ElasticSearch聚合查詢的示例代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2024-08-08
  • spring三級(jí)緩存以及為什么不用二級(jí)緩存解讀

    spring三級(jí)緩存以及為什么不用二級(jí)緩存解讀

    Spring三級(jí)緩存機(jī)制解決了循環(huán)依賴問題,通過一級(jí)緩存存放完全初始化的bean,二級(jí)緩存存放實(shí)例化但未完成依賴注入和初始化的bean,三級(jí)緩存存放bean的創(chuàng)建工廠,避免了重復(fù)創(chuàng)建和確保代理對(duì)象的正確生成
    2025-02-02
  • SpringBoot中的FailureAnalyzer使用詳解

    SpringBoot中的FailureAnalyzer使用詳解

    這篇文章主要介紹了SpringBoot中的FailureAnalyzer使用詳解,Spring Boot的FailureAnalyzer是一個(gè)接口,它用于在Spring Boot應(yīng)用啟動(dòng)失敗時(shí)提供有關(guān)錯(cuò)誤的詳細(xì)信息,這對(duì)于開發(fā)者來說非常有用,因?yàn)樗梢詭椭覀兛焖僮R(shí)別問題并找到解決方案,需要的朋友可以參考下
    2023-12-12

最新評(píng)論

九龙城区| 鄯善县| 万山特区| 报价| 青龙| 阳江市| 公主岭市| 武川县| 陕西省| 古浪县| 邹平县| 林周县| 彭阳县| 嘉禾县| 皋兰县| 龙海市| 瑞昌市| 龙山县| 乌苏市| 清原| 霍城县| 福泉市| 武平县| 黑山县| 诸城市| 黑龙江省| 镇平县| 洛宁县| 饶河县| 北川| 禹州市| 龙胜| 宁德市| 贺兰县| 大英县| 凤凰县| 邮箱| 盐池县| 七台河市| 洛南县| 威海市|