欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MyBatis延遲加載實(shí)現(xiàn)步驟詳解

 更新時(shí)間:2023年10月27日 11:12:55   作者:Rangers-sun  
這篇文章主要介紹了MyBatis延遲加載實(shí)現(xiàn)步驟詳解,? MyBatis中的延遲加載,也成為懶加載,是指在進(jìn)行關(guān)聯(lián)查詢時(shí),按照設(shè)置的延遲規(guī)則推遲對(duì)關(guān)聯(lián)對(duì)象的查詢,延遲加載可以有效的減少數(shù)據(jù)庫(kù)的壓力,需要的朋友可以參考下

延遲加載介紹

? MyBatis中的延遲加載,也成為懶加載,是指在進(jìn)行關(guān)聯(lián)查詢時(shí),按照設(shè)置的延遲規(guī)則推遲對(duì)關(guān)聯(lián)對(duì)象的查詢。延遲加載可以有效的減少數(shù)據(jù)庫(kù)的壓力。延遲加載只是針對(duì)有延遲設(shè)置的關(guān)聯(lián)對(duì)象的推遲查詢,對(duì)于主主查詢是直接進(jìn)行執(zhí)行SQL語(yǔ)句。

MyBatis關(guān)聯(lián)查詢加載時(shí)機(jī)

  • 直接加載:執(zhí)行完主對(duì)象的查詢后,馬上執(zhí)行對(duì)關(guān)聯(lián)對(duì)象的查詢語(yǔ)句
  • 侵入式延遲:執(zhí)行完對(duì)主對(duì)象對(duì)查詢后,不會(huì)執(zhí)行對(duì)關(guān)聯(lián)對(duì)象的查詢,但當(dāng)訪問(wèn)主對(duì)象的屬性詳情是,就會(huì)執(zhí)行關(guān)聯(lián)對(duì)象的查詢
  • 深度延遲:只有當(dāng)真正訪問(wèn)關(guān)聯(lián)對(duì)象的詳情時(shí),才會(huì)執(zhí)行查詢語(yǔ)句

MyBatis延遲加載實(shí)現(xiàn)步驟

全局延遲

在MyBatis核心配置類中添加標(biāo)簽

<settings>
        <!-- 延遲加載總開關(guān) -->
        <setting name="lazyLoadingEnabled" value="true"/>
        <!-- 侵入式延遲加載開關(guān) -->
        <setting name="aggressiveLazyLoading" value="true"/>
</settings>

部分延遲

在關(guān)聯(lián)查詢collection、association標(biāo)簽上添加 fetchType 屬性,lazy表示延遲加載,eager表示立即加載,指定屬性后,將在映射中忽略全局配置參數(shù) lazyLoadingEnabled,使用屬性的

<resultMap id="userMap" type="com.rangers.entity.User">
    <result column="id" property="id"></result>
    <result column="name" property="name"></result>
    <result column="address" property="address"></result>

    <collection property="orderList" column="id" ofType="com.rangers.entity.Order"
                select="com.rangers.dao.OrderMapper.findOrderById" fetchType="lazy">
    </collection>
</resultMap>

<select id="findUserById" resultMap="userMap">
    select * from user where id=#{id}
</select>
<select id="findOrderById" parameterType="int" resultType="com.rangers.entity.Order">
    select * from `order` where uid=#{id}
</select>

注意

在延遲加載的測(cè)試過(guò)程中,有發(fā)現(xiàn)延遲加載未生效問(wèn)題,就是在用戶表查詢后,訂單信息也有值。

? 經(jīng)過(guò)探索發(fā)現(xiàn),在debug模式下查看變量時(shí),debug會(huì)另起一個(gè)線程,然后重新調(diào)用代碼,debug彈出框顯示用戶信息時(shí),會(huì)自動(dòng)調(diào)用User類的hashCode()toString()方法。

解決一:不進(jìn)行debug打斷電,在查詢后直接打印一段分割線,查看控制臺(tái)信息

@org.junit.Test
public void testResult(){
    User user = userMapper.findUserById(1);
    System.out.println("------------------查詢OrderList分割線------------------");
    System.out.println(user.getOrderList());
}

控制臺(tái)顯示

17:33:31,229 DEBUG findUserById:159 - ==>  Preparing: select * from user where id=? 
17:33:31,253 DEBUG findUserById:159 - ==> Parameters: 1(Integer)
17:33:31,283 DEBUG findUserById:159 - <==      Total: 1
------------------查詢OrderList分割線------------------
17:33:31,284 DEBUG findOrderById:159 - ==>  Preparing: select * from `order` where uid=? 
17:33:31,284 DEBUG findOrderById:159 - ==> Parameters: 1(Integer)
17:33:31,290 DEBUG findOrderById:159 - <==      Total: 2
[Order{id=1, time=Wed Mar 10 17:22:30 CST 2021, total=1.11, uid=1, flag=0}, Order{id=2, time=Wed Mar 10 17:22:45 CST 2021, total=2.22, uid=1, flag=1}]

解決二:在MyBatis核心配置文件中添加setting標(biāo)簽,指定lazyLoadTriggerMethods屬性為空

<setting name="lazyLoadTriggerMethods" value=""/>

lazyLoadTriggerMethods:指定對(duì)象的方法觸發(fā)一次延遲加載。

默認(rèn)值:equals() clone() hashCode() ) toString()

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

相關(guān)文章

  • 如何用注解的方式實(shí)現(xiàn)Mybatis插入數(shù)據(jù)時(shí)返回自增的主鍵Id

    如何用注解的方式實(shí)現(xiàn)Mybatis插入數(shù)據(jù)時(shí)返回自增的主鍵Id

    這篇文章主要介紹了如何用注解的方式實(shí)現(xiàn)Mybatis插入數(shù)據(jù)時(shí)返回自增的主鍵Id,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • java之CSV大批量數(shù)據(jù)入庫(kù)的實(shí)現(xiàn)

    java之CSV大批量數(shù)據(jù)入庫(kù)的實(shí)現(xiàn)

    本文主要介紹了java之CSV大批量數(shù)據(jù)入庫(kù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • 解決spring中redistemplate不能用通配符keys查出相應(yīng)Key的問(wèn)題

    解決spring中redistemplate不能用通配符keys查出相應(yīng)Key的問(wèn)題

    這篇文章主要介紹了解決spring中redistemplate不能用通配符keys查出相應(yīng)Key的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • Java中用內(nèi)存映射處理大文件的實(shí)現(xiàn)代碼

    Java中用內(nèi)存映射處理大文件的實(shí)現(xiàn)代碼

    下面小編就為大家?guī)?lái)一篇Java中用內(nèi)存映射處理大文件的實(shí)現(xiàn)代碼。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-06-06
  • Java?垃圾回收超詳細(xì)講解記憶集和卡表

    Java?垃圾回收超詳細(xì)講解記憶集和卡表

    卡表就是記憶集的一種具體實(shí)現(xiàn),它定義了記憶集的記錄精度、與堆內(nèi)存的映射關(guān)系等。?關(guān)于卡表與記憶集的關(guān)系,不妨按照J(rèn)ava語(yǔ)言中HashMap與Map的關(guān)系來(lái)類比理解。記憶集是一種用于記錄從非收集區(qū)域指向收集區(qū)域的指針集合的抽象數(shù)據(jù)結(jié)構(gòu)
    2022-04-04
  • 擴(kuò)展logback將日志輸出到Kafka實(shí)例詳解

    擴(kuò)展logback將日志輸出到Kafka實(shí)例詳解

    logback是一個(gè)功能強(qiáng)大的Java日志框架,它是log4j的繼任者,提供了豐富的功能和配置選項(xiàng),本文將介紹如何通過(guò)擴(kuò)展logback,將日志輸出到Kafka實(shí)例,感興趣的朋友一起看看吧
    2024-12-12
  • hadoop序列化實(shí)現(xiàn)案例代碼

    hadoop序列化實(shí)現(xiàn)案例代碼

    序列化想必大家都很熟悉了,對(duì)象在進(jìn)行網(wǎng)絡(luò)傳輸過(guò)程中,需要序列化之后才能傳輸?shù)娇蛻舳?或者客戶端的數(shù)據(jù)序列化之后送達(dá)到服務(wù)端,本文將為大家介紹Hadoop如何實(shí)現(xiàn)序列化,需要的可以參考一下
    2022-01-01
  • Java創(chuàng)建數(shù)組、賦值的四種方式詳解(聲明+創(chuàng)建+初始化?)

    Java創(chuàng)建數(shù)組、賦值的四種方式詳解(聲明+創(chuàng)建+初始化?)

    數(shù)組是一種數(shù)據(jù)結(jié)構(gòu),用來(lái)存儲(chǔ)同一類型值的集合一旦創(chuàng)建了數(shù)組,就不能再改變它的長(zhǎng)度,下面這篇文章主要給大家介紹了關(guān)于Java創(chuàng)建數(shù)組、賦值的四種方式(聲明+創(chuàng)建+初始化?)的相關(guān)資料,需要的朋友可以參考下
    2024-04-04
  • 舉例講解Java中final關(guān)鍵字的用法

    舉例講解Java中final關(guān)鍵字的用法

    Java中的final關(guān)鍵字可以被用來(lái)修飾變量、方法和類等,意味著終結(jié)、不可改變,下面我們就來(lái)舉例講解Java中final關(guān)鍵字的用法:
    2016-06-06
  • SpringBoot使用Redis緩存的實(shí)現(xiàn)方法

    SpringBoot使用Redis緩存的實(shí)現(xiàn)方法

    這篇文章主要介紹了SpringBoot使用Redis緩存的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2018-02-02

最新評(píng)論