Mybatis延遲加載原理和延遲加載配置詳解
一、概念
MyBatis中的延遲加載,也稱為懶加載,是指在進行表的關(guān)聯(lián)查詢時,按照設(shè)置延遲規(guī)則推遲對關(guān)聯(lián)對象的select查詢。例如在進行一對多查詢的時候,只查詢出一方,當(dāng)程序中需要多方的數(shù)據(jù)時,mybatis再發(fā)出sql語句進行查詢,這樣子延遲加載就可以的減少數(shù)據(jù)庫壓力。MyBatis 的延遲加載只是對關(guān)聯(lián)對象的查詢有遲延設(shè)置,對于主加載對象都是直接執(zhí)行查詢語句的。
二、原理
MyBatis實現(xiàn)延遲加載的方式是使用代理對象,在訪問未加載的數(shù)據(jù)時觸發(fā)代理對象的方法,從而進行數(shù)據(jù)的加載。
三、延遲加載支持的對象
Mybatis 僅支持 association 關(guān)聯(lián)對象和 collection 關(guān)聯(lián)集合對象的延遲加載
- association 指的就是一對一
- collection 指的就是一對多查詢
四、 配置延遲加載
1.配置全局延遲加載
<!-- 在Mybatis的核?配置?件中可以使?setting標(biāo)簽修改全局的加載策略--> <settings> <!-- 打開延遲加載的開關(guān) --> <setting name="lazyLoadingEnabled" value="true"/> <!--不是必要的標(biāo)簽 false 深入式延遲加載 true 侵入式延遲加載 --> <setting name="aggressiveLazyLoading" value="false"/> </settings>
侵入式延遲加載和深入式延遲加載的區(qū)別
class 與 student 之間是一對多關(guān)系,我們在加載時,可以先加載 class 數(shù)據(jù),當(dāng)需要使用到 student 數(shù)據(jù)時,我們再加載 student 的相關(guān)數(shù)據(jù)。
- 侵入式延遲加載 侵入式延遲加載指的是只要主表的任一屬性加載,就會觸發(fā)延遲加載,比如:class 的 name 被加載,student 信息就會被觸發(fā)加載。
- 深度延遲加載 深度延遲加載指的是只有關(guān)聯(lián)的從表信息被加載,延遲加載才會被觸發(fā)。 通常,我們在實戰(zhàn)中更傾向使用深度延遲加載。
2 配置局部延遲加載
<!--修改標(biāo)簽的fetchType屬性 fetchType="lazy" 延遲加載策略 fetchType="eager" ?即加載策略--> <resultMap id="kunkunMap" type="user"> <id column="id" property="id"></id> <result column="ctrl" property="ctrl"></result> <!--開啟?對多 延遲加載--> <collection property="userList" ofType="order" column="id" select="com.lagou.dao.OrderMapper.findByUid" fetchType="lazy"> </collection> <!--開啟?對一 延遲加載--> <association property="order" column="id" javaType="order" select="com.xinxin.dao.OrderMapper.findById" fetchType="lazy"> </association> </resultMap>
3.加載順序
局部的加載策略的優(yōu)先級高于全局的加載策略。
到此這篇關(guān)于Mybatis延遲加載原理和延遲加載配置詳解的文章就介紹到這了,更多相關(guān)Mybatis延遲加載原理和配置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot實現(xiàn)自定義指標(biāo)監(jiān)控功能
本文主要介紹了SpringBoot實現(xiàn)自定義指標(biāo)監(jiān)控功能的實現(xiàn),,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,感興趣的小伙伴跟著著小編來一起來學(xué)習(xí)吧2024-01-01解決springboot 獲取form-data里的file文件的問題
這篇文章主要介紹了解決springboot 獲取form-data里的file文件的問題的相關(guān)資料,這里提供了詳細(xì)的解決步驟,需要的朋友可以參考下2017-07-07