摘要:問題解析因為熱愛,所以拼搏。如何解決問題本身給出解決方案,就是延遲加載。延遲加載延遲加載會解決上述的問題,也就是在個級聯(lián)表的情況下,只加載需求的數(shù)據(jù)庫表數(shù)據(jù)。在特定的關聯(lián)中,使用屬性覆蓋該內(nèi)容的功能。
Mybatis N+1問題解析
因為熱愛,所以拼搏。 --RuiDer
前導必備Mybatis
數(shù)據(jù)庫
級聯(lián)
N+1問題??N+1問題來源于數(shù)據(jù)庫中常見的級聯(lián)技術,即N個數(shù)據(jù)庫表形成關聯(lián)關系,當再增加一個關聯(lián)表時,也就是N+1個級聯(lián)關系,由于某些時候,我們并不需要加載數(shù)據(jù)庫的所有數(shù)據(jù),而是某一個數(shù)據(jù)庫表中數(shù)據(jù),這時Mybatis會自動加載所有表的數(shù)據(jù),多執(zhí)行幾條無關sql語句,會造成數(shù)據(jù)庫資源的浪費以及系統(tǒng)性能的下降,這就是級聯(lián)表的缺點。如何解決N+1問題
Mybatis本身給出解決方案,就是延遲加載。延遲加載
延遲加載會解決上述的N+1問題,也就是在N+1個級聯(lián)表的情況下,只加載需求的數(shù)據(jù)庫表數(shù)據(jù)。這是互聯(lián)網(wǎng)發(fā)展的需求,性能提升的途徑。如何配置Mybatis完成延遲加載
全局配置: - lazyLoadingEnabled true/false - aggressiveLazyLoading true/false lazyLoadingEnabled:延遲加載的全局開關,當開啟時,所有關聯(lián)都會延遲加載。在特定的關聯(lián)中, 使用fetchType屬性覆蓋該內(nèi)容的功能。fetchType將在后面介紹。 aggressiveLazyLoading:是層級延遲加載開關,什么意思呢?就是處于同一個層級的關聯(lián)表會同 時延遲加載,或者同時被加載。 配置: 在Mybatis的全局配置中的setting標簽中加入設置全局配置的缺點
上面的配置屬于全局配置,會出現(xiàn)一個問題,同一個層級的級聯(lián)表也存在需求性的差異,同一級的某個數(shù)據(jù)庫表的數(shù)據(jù)或許不是我們經(jīng)常使用的,那么上述的配置也會影響系統(tǒng)的性能。
全局配置的優(yōu)化 --- fetchType屬性Mybatis使用fetchType屬性解決全局配置的缺點。fetchType出現(xiàn)在級聯(lián)元素association,collection中,它存在兩個值
- eager:獲得當前POJO后立即加載對應的數(shù)據(jù)。 - lazy:獲得當前POJO后延遲加載對應的數(shù)據(jù)。 配置:
我的github
我的博客
CSDN
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://m.hztianpu.com/yun/71404.html
摘要:簡介我從七月份開始閱讀源碼,并在隨后的天內(nèi)陸續(xù)更新了篇文章??紤]到超長文章對讀者不太友好,以及拆分文章工作量也不小等問題。經(jīng)過兩周緊張的排版,一本小小的源碼分析書誕生了。我在寫系列文章中,買了一本書作為參考,這本書是技術內(nèi)幕。 1.簡介 我從七月份開始閱讀MyBatis源碼,并在隨后的40天內(nèi)陸續(xù)更新了7篇文章。起初,我只是打算通過博客的形式進行分享。但在寫作的過程中,發(fā)現(xiàn)要分析的代碼...
摘要:如問到是否使用某框架,實際是是問該框架的使用場景,有什么特點,和同類可框架對比一系列的問題。這兩個方向的區(qū)分點在于工作方向的側重點不同。 [TOC] 這是一份來自嗶哩嗶哩的Java面試Java面試 32個核心必考點完全解析(完) 課程預習 1.1 課程內(nèi)容分為三個模塊 基礎模塊: 技術崗位與面試 計算機基礎 JVM原理 多線程 設計模式 數(shù)據(jù)結構與算法 應用模塊: 常用工具集 ...
摘要:前言嗨,小伙伴們,這篇博文將帶大家手寫,讓大家對的核心原理以及工作流程有更加深刻的理解。模塊顧名思義,就是框架配置類,用于解析配置文件加載相關環(huán)境。配置模塊這里的對框架的配置使用了簡單的,主要原因還是簡單易懂然后節(jié)省時間。 前言 (????)??嗨,小伙伴們,這篇博文將帶大家手寫mybatis,讓大家對mybaits的核心原理以及工作流程有更加深刻的理解。在上篇Spring-Mybat...
摘要:我認為學習框架源碼分為兩步抓住主線,掌握框架的原理和流程理解了處理思路之后,再去理解面向對象思想和設計模式的用法目前第一步尚有問題,需要多走幾遍源碼,加深下理解,一起加油 這篇文章我們來深入閱讀下Mybatis的源碼,希望以后可以對底層框架不那么畏懼,學習框架設計中好的思想; 架構原理 架構圖 showImg(https://segmentfault.com/img/remote/...
摘要:的簡稱,運行環(huán)境,為的運行提供了所需環(huán)境。分割字符串,返回一個分割后的字符串數(shù)組。線程安全是線程安全的,而是非線程安全的。迭代器取代了集合框架中的,迭代器允許調用者在迭代過程中移除元素。 本文分為十九個模塊,分別是:?Java 基礎、容器、多線程、反射、對象拷貝、Java Web 、異常、網(wǎng)絡、設計模式、Spring/Spring MVC、Spring Boot/Spring Clou...
閱讀 2201·2021-11-18 10:07
閱讀 3598·2021-09-04 16:48
閱讀 3302·2019-08-30 15:53
閱讀 1313·2019-08-30 12:55
閱讀 2515·2019-08-29 15:08
閱讀 3221·2019-08-29 15:04
閱讀 2952·2019-08-29 14:21
閱讀 2972·2019-08-29 11:21