Mybatis延遲加載的實(shí)現(xiàn)方式
1、概念:
MyBatis中的延遲加載,也稱為懶加載,是指在進(jìn)行表的關(guān)聯(lián)查詢時,按照設(shè)置延遲規(guī)則推遲對關(guān)聯(lián)對象的select查詢。例如在進(jìn)行一對多查詢的時候,只查詢出一方,當(dāng)程序中需要多方的數(shù)據(jù)時,mybatis再發(fā)出sql語句進(jìn)行查詢,這樣子延遲加載就可以的減少數(shù)據(jù)庫壓力。MyBatis 的延遲加載只是對關(guān)聯(lián)對象的查詢有遲延設(shè)置,對于主加載對象都是直接執(zhí)行查詢語句的。
2、加載時機(jī):
直接加載:執(zhí)行完對主加載對象的 select 語句,馬上執(zhí)行對關(guān)聯(lián)對象的 select 查詢。侵入式延遲: 執(zhí)行對主加載對象的查詢時,不會執(zhí)行對關(guān)聯(lián)對象的查詢。但當(dāng)要訪問主加載對象的詳情屬性時,就會馬上執(zhí)行關(guān)聯(lián)對象的select查詢。深度延遲: 執(zhí)行對主加載對象的查詢時,不會執(zhí)行對關(guān)聯(lián)對象的查詢。訪問主加載對象的詳情時也不會執(zhí)行關(guān)聯(lián)對象的select查詢。只有當(dāng)真正訪問關(guān)聯(lián)對象的詳情時,才會執(zhí)行對關(guān)聯(lián)對象的 select 查詢。
注意:延遲加載的應(yīng)用要求:關(guān)聯(lián)對象的查詢與主加載對象的查詢必須是分別進(jìn)行的select語句,不能是使用多表連接所進(jìn)行的select查詢。因?yàn)?,多表連接查詢,實(shí)質(zhì)是對一張表的查詢,對由多個表連接后形成的一張表的查詢。會一次性將多張表的所有信息查詢出來。
3、侵入式延遲加載:
①、Mybatis-config.xml大配置文件,首先開啟延遲加載,然后再配置侵入式加載
<!--開啟延遲加載-->
<setting name="lazyLoadingEnabled" value="true"/>
<!--配置侵入式延遲加載 默認(rèn)為false(深度加載)
侵入式:默認(rèn)只會執(zhí)行主加載SQL,那么當(dāng)訪問主加載對象的詳細(xì)信息時才會執(zhí)行關(guān)聯(lián)對象的SQL查詢
深度延遲:默認(rèn)只執(zhí)行主加載SQL,那么當(dāng)調(diào)用到主加載對象中關(guān)聯(lián)對象的信息時才會執(zhí)行關(guān)聯(lián)對象的SQL查詢
-->
<setting name="aggressiveLazyLoading" value="true"/>
②、不調(diào)用主加載對象時只有一條SQL


③、調(diào)用主加載對象的信息時會產(chǎn)生兩條SQL


4、深入式延遲加載:
①、Mybatis-config.xml大配置文件,首先開啟延遲加載,然后再配置深度加載
<!--開啟延遲加載-->
<setting name="lazyLoadingEnabled" value="true"/>
<!--配置侵入式延遲加載 默認(rèn)為false(深度加載)
侵入式:默認(rèn)只會執(zhí)行主加載SQL,那么當(dāng)訪問主加載對象的詳細(xì)信息時才會執(zhí)行關(guān)聯(lián)對象的SQL查詢
深度延遲:默認(rèn)只執(zhí)行主加載SQL,那么當(dāng)調(diào)用到主加載對象中關(guān)聯(lián)對象的信息時才會執(zhí)行關(guān)聯(lián)對象的SQL查詢
-->
<setting name="aggressiveLazyLoading" value="false"/>
②、調(diào)用主加載對象時不會執(zhí)行第二條加載SQL


③、調(diào)用關(guān)聯(lián)對象詳細(xì)信息時會執(zhí)行第二次查詢


以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
springboot+quartz以持久化的方式實(shí)現(xiàn)定時任務(wù)的代碼
這篇文章主要介紹了springboot+quartz以持久化的方式實(shí)現(xiàn)定時任務(wù)的相關(guān)知識,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07
一步步教你搭建Scala開發(fā)環(huán)境(非常詳細(xì)!)
Scala是一門基于jvm的函數(shù)式的面向?qū)ο缶幊陶Z言,擁有比java更加簡潔的語法,下面這篇文章主要給大家介紹了關(guān)于搭建Scala開發(fā)環(huán)境的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04
將一個數(shù)組按照固定大小進(jìn)行拆分成數(shù)組的方法
下面小編就為大家?guī)硪黄獙⒁粋€數(shù)組按照固定大小進(jìn)行拆分成數(shù)組的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-11-11

