MyBatis延遲載入

2021-10-02 17:05:26 字數 1713 閱讀 4260

1.延遲載入:稱為懶載入,可以控制載入的方式,主要用於關聯查詢資料上,可以減輕資料庫伺服器壓力,mybatis預設不開啟延遲載入

延遲載入時機:

1.直接載入:在執行select查詢出主載入物件資料完畢後,直接執行關聯物件的查詢

2.侵入式延遲載入:先執行主載入物件的查詢,不會立馬執行關聯物件的查詢,當呼叫主載入物件的屬性時才會執行關聯查詢

3.深度延遲:先執行主載入物件的查詢,不會立馬執行關聯物件查詢,當呼叫關聯物件的屬性才會執行關聯查詢

延遲載入配置過程如下:

1.開啟延遲載入:在大配置檔案中新增lazylodingenabled屬性值為true,預設為false代表不開啟延遲載入,如果開啟延遲載入不配置延遲載入方式,預設為深度

2.開啟侵入式延遲載入:在大配置檔案中,配置延遲載入方式,新增aggressivelazyloading屬性,true代表的是侵入式延遲載入,false代表的是深度延遲載入

在3.4.1版本包括版本以前預設是ture代表侵入式延遲載入,在版本以後預設值為false代表深度延遲

2.一級快取

預設是開啟一級快取,所在的範圍sqlsession範圍,只要sqlsession沒有關閉,那麼快取中的資料仍然有效

快取說明:快取是根據namespace進行劃分的,不同的namespace快取資料相互不干擾,快取是為了減輕資料庫伺服器的壓力,也就是說相同的查詢只需要第一次執行資料庫

一級快取證明:

增刪改會不會對以及快取有影響:增刪改會清空以及快取資料,從新執行資料庫查詢,但是如果沒有commit資料,請各位同學注意,可能會產生髒資料

一級快取結論:

1.mybatis預設開啟一級快取,作用域為sqlsession,統一個sqlsession查詢相同資料快取生效

2.快取查詢依據:根據namespace+sql的id和sql語句本身,如果發現都相同走快取,不同走查詢

3.增刪改會清空一級快取,但是不要忘了commit,否則會出現髒資料

3.二級快取:需要物件實現序列化

需要手動開啟,所在的範圍與整個應用程式相同,與sqlsession無關

開啟二級快取方式:

1.大配置檔案中開啟二級快取

2.小配置檔案開啟快取

增刪改對二級快取影響:

如果commit會重新重新整理二緩資料,執行資料庫查詢,如果沒有commit則不重新整理走快取資料

關閉重新整理快取:預設情況下增刪改只要提交,那麼就會清空快取,重新查詢資料庫 可以關閉重新整理快取,這樣在提交時就不回重新重新整理快取資料,但是會出現髒資料

1.增刪改可以關閉重新整理快取

flushcache用在增刪改時,預設值為true代表重新整理快取,如果用在查詢預設值為false代表讀取快取中資料

insert into teacher(tname) values (#)

查詢不應用快取:

usecache用在查詢時,預設值為true代表的應用快取 false代表不應用快取,每一次都發sql

select * from teacher

4.mybatis整合第三方快取ehcache:需要開啟二緩,依賴於二緩

1.匯入依賴   ehcache   mybatis-ehcache

2.配置二級快取策略,使用ehcache第三方快取

3.新增ehcache配置檔案

Mybatis延遲載入

現在有這麼乙個需求,要查詢所有的訂單,並且獲得該訂單的詳細資訊。如果一次性把所有需要的資料都請求到,那麼對伺服器和資料庫的開銷會很大,所以可以先載入訂單資訊,需要用到訂單詳情的時候再請求詳情資料。那麼就要用到mybatis的延遲載入 name lazyloadingenabled value tru...

mybatis延遲載入

舉個例子 如果查詢訂單並且關聯查詢使用者資訊。如果先查詢訂單資訊即可滿足要求,當我們需要查詢使用者資訊時再查詢使用者資訊。把對使用者資訊的按需去查詢就是延遲載入。所以延遲載入即先從單錶查詢 需要時再從關聯表去關聯查詢,大大提高資料庫效能,因為查詢單錶要比關聯查詢多張表速度要快。我們來對比一下 關聯查...

mybatis延遲載入

在mybatis中,通常會進行多表聯合查詢,但是有的時候並不會立即用到所有的聯合查詢結果,此時需要一種機制,當需要的時候再查詢,這種 按需查詢 的機制,就可以使用延遲載入來實現。延遲載入可以做到,先從單錶查詢,需要時再從關聯表關聯查詢,這樣可以大大提高資料庫的效能,因為查詢單錶要比關聯查詢多張表速度...