成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Mybatis N+1問題解析

qqlcbb / 2423人閱讀

摘要:?jiǎn)栴}解析因?yàn)闊釔郏云床?。如何解決問題本身給出解決方案,就是延遲加載。延遲加載延遲加載會(huì)解決上述的問題,也就是在個(gè)級(jí)聯(lián)表的情況下,只加載需求的數(shù)據(jù)庫(kù)表數(shù)據(jù)。在特定的關(guān)聯(lián)中,使用屬性覆蓋該內(nèi)容的功能。

Mybatis N+1問題解析

因?yàn)闊釔郏云床? --RuiDer

前導(dǎo)必備

Mybatis

數(shù)據(jù)庫(kù)

級(jí)聯(lián)

N+1問題??
N+1問題來(lái)源于數(shù)據(jù)庫(kù)中常見的級(jí)聯(lián)技術(shù),即N個(gè)數(shù)據(jù)庫(kù)表形成關(guān)聯(lián)關(guān)系,當(dāng)再增加一個(gè)關(guān)聯(lián)表時(shí),也就是N+1個(gè)級(jí)聯(lián)關(guān)系,由于某些時(shí)候,我們并不需要加載數(shù)據(jù)庫(kù)的所有數(shù)據(jù),而是某一個(gè)數(shù)據(jù)庫(kù)表中數(shù)據(jù),這時(shí)Mybatis會(huì)自動(dòng)加載所有表的數(shù)據(jù),多執(zhí)行幾條無(wú)關(guān)sql語(yǔ)句,會(huì)造成數(shù)據(jù)庫(kù)資源的浪費(fèi)以及系統(tǒng)性能的下降,這就是級(jí)聯(lián)表的缺點(diǎn)。
如何解決N+1問題
Mybatis本身給出解決方案,就是延遲加載。
延遲加載
延遲加載會(huì)解決上述的N+1問題,也就是在N+1個(gè)級(jí)聯(lián)表的情況下,只加載需求的數(shù)據(jù)庫(kù)表數(shù)據(jù)。這是互聯(lián)網(wǎng)發(fā)展的需求,性能提升的途徑。
如何配置Mybatis完成延遲加載
全局配置:
    - lazyLoadingEnabled        true/false
    - aggressiveLazyLoading      true/false
    
    lazyLoadingEnabled:延遲加載的全局開關(guān),當(dāng)開啟時(shí),所有關(guān)聯(lián)都會(huì)延遲加載。在特定的關(guān)聯(lián)中,
使用fetchType屬性覆蓋該內(nèi)容的功能。fetchType將在后面介紹。

    aggressiveLazyLoading:是層級(jí)延遲加載開關(guān),什么意思呢?就是處于同一個(gè)層級(jí)的關(guān)聯(lián)表會(huì)同
時(shí)延遲加載,或者同時(shí)被加載。
    
    配置:
        在Mybatis的全局配置中的setting標(biāo)簽中加入設(shè)置
        
            
            
        
全局配置的缺點(diǎn)

上面的配置屬于全局配置,會(huì)出現(xiàn)一個(gè)問題,同一個(gè)層級(jí)的級(jí)聯(lián)表也存在需求性的差異,同一級(jí)的某個(gè)數(shù)據(jù)庫(kù)表的數(shù)據(jù)或許不是我們經(jīng)常使用的,那么上述的配置也會(huì)影響系統(tǒng)的性能。

全局配置的優(yōu)化 --- fetchType屬性
Mybatis使用fetchType屬性解決全局配置的缺點(diǎn)。fetchType出現(xiàn)在級(jí)聯(lián)元素association,collection中,它存在兩個(gè)值
    - eager:獲得當(dāng)前POJO后立即加載對(duì)應(yīng)的數(shù)據(jù)。
    - lazy:獲得當(dāng)前POJO后延遲加載對(duì)應(yīng)的數(shù)據(jù)。
    
配置:
        

我的github
我的博客
CSDN

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/71404.html

相關(guān)文章

  • MyBatis 源碼分析系列文章合集

    摘要:簡(jiǎn)介我從七月份開始閱讀源碼,并在隨后的天內(nèi)陸續(xù)更新了篇文章??紤]到超長(zhǎng)文章對(duì)讀者不太友好,以及拆分文章工作量也不小等問題。經(jīng)過兩周緊張的排版,一本小小的源碼分析書誕生了。我在寫系列文章中,買了一本書作為參考,這本書是技術(shù)內(nèi)幕。 1.簡(jiǎn)介 我從七月份開始閱讀MyBatis源碼,并在隨后的40天內(nèi)陸續(xù)更新了7篇文章。起初,我只是打算通過博客的形式進(jìn)行分享。但在寫作的過程中,發(fā)現(xiàn)要分析的代碼...

    Crazy_Coder 評(píng)論0 收藏0
  • Java面試 32個(gè)核心必考點(diǎn)完全解析

    摘要:如問到是否使用某框架,實(shí)際是是問該框架的使用場(chǎng)景,有什么特點(diǎn),和同類可框架對(duì)比一系列的問題。這兩個(gè)方向的區(qū)分點(diǎn)在于工作方向的側(cè)重點(diǎn)不同。 [TOC] 這是一份來(lái)自嗶哩嗶哩的Java面試Java面試 32個(gè)核心必考點(diǎn)完全解析(完) 課程預(yù)習(xí) 1.1 課程內(nèi)容分為三個(gè)模塊 基礎(chǔ)模塊: 技術(shù)崗位與面試 計(jì)算機(jī)基礎(chǔ) JVM原理 多線程 設(shè)計(jì)模式 數(shù)據(jù)結(jié)構(gòu)與算法 應(yīng)用模塊: 常用工具集 ...

    JiaXinYi 評(píng)論0 收藏0
  • 教你手寫Mybatis框架

    摘要:前言嗨,小伙伴們,這篇博文將帶大家手寫,讓大家對(duì)的核心原理以及工作流程有更加深刻的理解。模塊顧名思義,就是框架配置類,用于解析配置文件加載相關(guān)環(huán)境。配置模塊這里的對(duì)框架的配置使用了簡(jiǎn)單的,主要原因還是簡(jiǎn)單易懂然后節(jié)省時(shí)間。 前言 (????)??嗨,小伙伴們,這篇博文將帶大家手寫mybatis,讓大家對(duì)mybaits的核心原理以及工作流程有更加深刻的理解。在上篇Spring-Mybat...

    antyiwei 評(píng)論0 收藏0
  • Mybatis源碼分析

    摘要:我認(rèn)為學(xué)習(xí)框架源碼分為兩步抓住主線,掌握框架的原理和流程理解了處理思路之后,再去理解面向?qū)ο笏枷牒驮O(shè)計(jì)模式的用法目前第一步尚有問題,需要多走幾遍源碼,加深下理解,一起加油 這篇文章我們來(lái)深入閱讀下Mybatis的源碼,希望以后可以對(duì)底層框架不那么畏懼,學(xué)習(xí)框架設(shè)計(jì)中好的思想; 架構(gòu)原理 架構(gòu)圖 showImg(https://segmentfault.com/img/remote/...

    lindroid 評(píng)論0 收藏0
  • Java 最常見 200+ 面試題全解析:面試必備(附答案)

    摘要:的簡(jiǎn)稱,運(yùn)行環(huán)境,為的運(yùn)行提供了所需環(huán)境。分割字符串,返回一個(gè)分割后的字符串?dāng)?shù)組。線程安全是線程安全的,而是非線程安全的。迭代器取代了集合框架中的,迭代器允許調(diào)用者在迭代過程中移除元素。 本文分為十九個(gè)模塊,分別是:?Java 基礎(chǔ)、容器、多線程、反射、對(duì)象拷貝、Java Web 、異常、網(wǎng)絡(luò)、設(shè)計(jì)模式、Spring/Spring MVC、Spring Boot/Spring Clou...

    hufeng 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<