Mybatis延遲加載

延遲加載概念:需要用到數(shù)據(jù)時才進行加載,不需要用到數(shù)據(jù)時就不加載數(shù)據(jù),延遲加載也叫做懶加載。

優(yōu)點:先從單表查詢,需要用的時候再從關(guān)聯(lián)表去關(guān)聯(lián)查詢,大大提高數(shù)據(jù)庫性能,因為查詢單表要比關(guān)聯(lián)查詢多張表速度要快。

缺點:因為只有當(dāng)需要用到數(shù)據(jù)時,才會進行數(shù)據(jù)庫查詢,在大批量數(shù)據(jù)查詢時,因為查詢工作也要耗費時間,所以造就用戶用戶等待時間較長,造成用戶體驗下降。

使用場景:

一對多,多對多:通常使用延遲加載。

一對一,多對一:通常使用立即加載。

注意:延遲加載是基于嵌套查詢實現(xiàn)的

局部延遲加載

<!— 開啟一對多 延遲加載 —>

<resultMap id = “UserMap" type = “user”> 

   <id cloumn=“id” property=“id”></id>

   <result column=“username” property=“username”></result>

   <!—  fetchType = “l(fā)azy 懶加載策略”

           fetchType = “eager  立即加載策略”

   —>

   <collection property=“orderList” ofType=“order” column=“id” select = “com.lagou.dao.orderMapper.findByUid” fetchType     =“l(fā)azy”>

   </collection>

</resultMap>

<select id = “findAll” resultMap = “userMap”>

   select * from `user`

</select>

全局延遲加載

在Mybatis的核心配置文件總可以使用setting標(biāo)簽修改全局的加載策略

<settings>

   <!— 開啟全局延遲加載功能 —>

   <setting name = “l(fā)azyLoadingEnabled” value = “true"></setting>

</settings>

詳細配置可參考官方文檔的介紹:https://mybatis.org/mybatis-3/zh/configuration.html#settings

注意:局部的加載策略優(yōu)先級高于全局的加載策略。

延遲加載原理:

使用CGLIB或Javassist(默認(rèn))創(chuàng)建目標(biāo)對象的代理對象,當(dāng)調(diào)用代理 對象的延遲加載屬性的getting方法時,進入攔截器方法(invoke)。發(fā)現(xiàn)該方法需要延遲加載時,會單獨發(fā)送事先保存好的查詢關(guān)聯(lián)對象的SQL,查詢上來后調(diào)用set方法,為屬性設(shè)置值,接著調(diào)用get方法,返回我們剛剛set的內(nèi)容,這就是延遲加載的基本原理

延遲加載原理總結(jié):

延遲加載主要是通過動態(tài)代理的形式實現(xiàn),通過代理攔截到指定方法,執(zhí)行數(shù)據(jù)加載。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Mybatis的延遲加載 一、什么是延遲加載 延遲加載:就是在需要用到數(shù)據(jù)時才進行加載,不需要用到數(shù)據(jù)時就不加載數(shù)...
    一只程序汪閱讀 557評論 0 1
  • Mybatis 中一對一,一對多,多對多關(guān)系的配置及實現(xiàn),可以實現(xiàn)對象的關(guān)聯(lián)查詢。實際開發(fā)過程中很多時候我們并不需...
    飛揚code閱讀 752評論 0 2
  • 延遲加載的含義 延遲加載又叫按需查詢(懶加載),mybatis支持延遲加載,我們希望一次性把常用的級聯(lián)數(shù)據(jù)通過sq...
    Clark_閱讀 830評論 0 0
  • mybatis的延遲加載策略 延遲加載:在需要用到數(shù)據(jù)時才進行加載,不需要用到數(shù)據(jù)時就不加載數(shù)據(jù)。延遲加載也稱懶加...
    哈哈大圣閱讀 533評論 0 8
  • 5.1 什么是延遲加載 resultMap可以實現(xiàn)高級映射(使用association、collection實現(xiàn)...
    飛揚code閱讀 307評論 0 2

友情鏈接更多精彩內(nèi)容