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

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ī)則推遲對關(guān)聯(lián)對象的查詢,延遲加載可以有效的減少數(shù)據(jù)庫的壓力,需要的朋友可以參考下

延遲加載介紹

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

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

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

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>

注意

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

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

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

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

控制臺顯示

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:指定對象的方法觸發(fā)一次延遲加載。

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

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

相關(guān)文章

  • 最新Java?泛型中的通配符講解

    最新Java?泛型中的通配符講解

    Java的泛型是偽泛型,那是因?yàn)榉盒托畔⒅淮嬖谟诖a編譯階段,在生成的字節(jié)碼中是不包含泛型中的類型信息的,使用泛型的時(shí)候加上類型參數(shù),在編譯器編譯的時(shí)候會去掉,這個(gè)過程為類型擦除,這篇文章主要介紹了Java?泛型中的通配符,需要的朋友可以參考下
    2022-06-06
  • 一文搞懂String的intern()方法

    一文搞懂String的intern()方法

    這篇文章主要給大家介紹String的intern()方法,文中有詳細(xì)的代碼示例,感興趣的小伙伴讓我們一起來看看這究竟是個(gè)什么玩意
    2023-06-06
  • Java中零拷貝和深拷貝的原理及實(shí)現(xiàn)探究(代碼示例)

    Java中零拷貝和深拷貝的原理及實(shí)現(xiàn)探究(代碼示例)

    深拷貝和零拷貝是兩個(gè)在 Java 中廣泛使用的概念,它們分別用于對象復(fù)制和數(shù)據(jù)傳輸優(yōu)化,下面將詳細(xì)介紹這兩個(gè)概念的原理,并給出相應(yīng)的 Java 代碼示例,感興趣的朋友一起看看吧
    2023-12-12
  • spring-data-redis連接操作redis的實(shí)現(xiàn)

    spring-data-redis連接操作redis的實(shí)現(xiàn)

    spring-data-redis則是對Jedis進(jìn)行了高度封裝,使用起來非常方便。本文主要介紹了spring-data-redis連接操作redis的實(shí)現(xiàn),感興趣的可以了解一下
    2021-07-07
  • JAVA實(shí)現(xiàn)PDF轉(zhuǎn)HTML文檔的示例代碼

    JAVA實(shí)現(xiàn)PDF轉(zhuǎn)HTML文檔的示例代碼

    本文是基于PDF文檔轉(zhuǎn)PNG圖片,然后進(jìn)行圖片拼接,拼接后的圖片轉(zhuǎn)為base64字符串,然后拼接html文檔寫入html文件實(shí)現(xiàn)PDF文檔轉(zhuǎn)HTML文檔,感興趣的可以了解一下
    2021-05-05
  • SpringBoot中Lombok注解失效的解決方案

    SpringBoot中Lombok注解失效的解決方案

    文章介紹了在使用SpringBoot 4.0.3版本時(shí)遇到Lombok依賴不生效的問題,通過排查發(fā)現(xiàn)是由于IDEA的Maven插件配置問題導(dǎo)致的,通過注釋掉pom.xml文件中的所有插件配置,問題解決,需要的朋友可以參考下
    2026-03-03
  • Java內(nèi)部類持有外部類導(dǎo)致內(nèi)存泄露的原因與解決方案詳解

    Java內(nèi)部類持有外部類導(dǎo)致內(nèi)存泄露的原因與解決方案詳解

    這篇文章主要為大家詳細(xì)介紹了Java因?yàn)閮?nèi)部類持有外部類導(dǎo)致內(nèi)存泄露的原因以及其解決方案,文中的示例代碼講解詳細(xì),希望對大家有所幫助
    2022-11-11
  • Java I/O 操作及優(yōu)化詳細(xì)介紹

    Java I/O 操作及優(yōu)化詳細(xì)介紹

    這篇文章主要介紹了Java I/O 操作及優(yōu)化詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • java微信公眾號發(fā)送消息模板

    java微信公眾號發(fā)送消息模板

    這篇文章主要為大家詳細(xì)介紹了java微信公眾號發(fā)送消息模板,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • springboot項(xiàng)目中mybatis-plus@Mapper注入失敗問題

    springboot項(xiàng)目中mybatis-plus@Mapper注入失敗問題

    這篇文章主要介紹了springboot項(xiàng)目中mybatis-plus@Mapper注入失敗問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07

最新評論

清原| 新河县| 惠水县| 万盛区| 磐安县| 荣昌县| 南陵县| 化州市| 射洪县| 隆安县| 治多县| 门头沟区| 光山县| 普安县| 囊谦县| 武汉市| 盐亭县| 台东市| 肥东县| 阿城市| 日照市| 通山县| 武陟县| 富宁县| 四子王旗| 申扎县| 永济市| 聂拉木县| 扎鲁特旗| 五常市| 英超| 台江县| 武鸣县| 莆田市| 金湖县| 山丹县| 大荔县| 夏邑县| 满城县| 衡南县| 玛纳斯县|