Mybatis的延遲載入和快取

2022-03-16 10:19:07 字數 2330 閱讀 3122

1. mybatis中的延遲載入,也稱為懶載入,是指在進行關聯查詢時,按照設定延遲載入規則推遲對關聯物件的select查詢。延遲載入可以有效的減少資料庫壓力。

注意:mybatis的延遲載入只是對關聯物件的查詢有延遲設定,對於主載入物件都是直接執行查詢語句的。

2.mybatis根據對關聯物件查詢的select語句的執行時機,分為3種型別:

直接載入

侵入式延遲載入

深度延遲載入

直接載入

執行完對主載入物件的select語句,馬上執行對關聯物件的select查詢

侵入是延遲

執行對主載入物件的查詢時,不會執行對關聯物件的查詢。但是當要訪問主載入物件的詳情時,就會馬上執行關聯物件的select查詢。即對關聯物件的查詢執行,侵入到了主載入物件的詳情訪問中。也可以這樣理解:將關聯物件的詳情侵入到了主載入物件的詳情中,即將關聯物件的詳情作為主載入物件詳情的一部分出現了

深度延遲

執行對主載入物件的查詢時,不會執行對關聯物件的查詢。訪問主載入物件的詳情時也不會執行關聯物件的select查詢。只有當真正訪問關聯物件的詳情時,才會執行對關聯物件的select查詢。

注意:延遲載入的應用要求:關聯物件的查詢與主載入物件的查詢必須是分別進行的select語句,不能是使用多表連線所進行的select查詢。因為,多表連線查詢,實質是對一張表的查詢,對由多個表連線後形成的一張表的查詢。會一次性將多張表的所有資訊查詢出來。

查詢快取

查詢快取的使用,主要是為了提供查詢訪問速度。將使用者對同一資料的重複查詢過程簡化,不再每次均從資料庫查詢獲取結果資料,從而提高訪問速度。

快取的說明

mybatis查詢快取機制。根據快取區的作用域與生命週期,可劃分為兩種:一級快取和二級快取。

一級快取存在性的證明:

一級快取---從快取中查詢資料的依據

快取的底層實現是乙個map,map的value是查詢結果

map的key,即查詢依據,使用的orm架構不同,查詢依據是不同的

mybatis的查詢依據是:sql的id+sql語句

hibernate的查詢依據是:查詢結果物件的id

增刪改對一級快取的影響:

增刪改會清空一級快取

mybatis快取:

開啟二級快取的三個條件

增刪改對二級快取的影響

1.增刪改也會清空二級快取

2.對於二級快取的清空實質上是對value清空為null,key依然存在,並非將entry刪除

3.從db中進行select查詢的條件是:

1.快取中根本不存在這個key

2.存在key對應的entry,但是value為null

二級快取的配置

這個更高階的配置建立了乙個 fifo 快取,並每隔 60 秒重新整理,存數結果物件或列表的 512 個引用,

而且返回的物件被認為是唯讀的

可用的**策略

lru – 最近最少使用的:移除最長時間不被使用的物件。

fifo – 先進先出:按物件進入快取的順序來移除它們。

soft – 軟引用:移除基於垃圾**器狀態和軟引用規則的物件。

weak – 弱引用:更積極地移除基於垃圾收集器狀態和弱引用規則的物件。

預設的是 lru。

flushinterval(重新整理間隔)可以被設定為任意的正整數,而且它們代表乙個合理的毫秒

形式的時間段。預設情況是不設定,也就是沒有重新整理間隔,快取僅僅呼叫語句時重新整理。

size(引用數目)可以被設定為任意正整數,要記住你快取的物件數目和你執行環境的

可用記憶體資源數目。預設值是 1024。

readonly(唯讀)屬性可以被設定為 true 或 false。唯讀的快取會給所有呼叫者返回

緩 存物件的相同例項。因此這些物件不能被修改。這提供了很重要的效能優勢。

可讀寫的快取 會返回快取物件的拷貝(通過序列化) 。這會慢一些,但是安全,因此預設是 false。

mybatis延遲載入,快取

延遲載入又叫懶載入,也叫按需載入。也就是說先載入主資訊,在需要的時候,再去載入從資訊。在mybatis中,resultmap標籤 的association標籤和collection標籤具有延遲載入的功能。1.讀取配置檔案 inputstream is resources.getresourceass...

Mybatis懶載入和快取機制

mybatis的配置快取機制和懶載入 二級快取的侷限性 在乙個物件更新後,無法更新其他同乙個namespace中的物件,並且會清空。二級快取以namespace劃分。一級快取 在同乙個sqlsession中兩次執行相同的sql語句,第一次執行完畢會將資料庫中查詢的資料寫到快取 記憶體 第二次會從快取...

Mybatis延遲載入和查詢快取

在全域性配置引數設定開啟延遲載入總開關 name lazyloadingenabled value true name aggressivelazyloading value false settings 設定項 描述允許值 預設值lazyloadingenabled 全域性性設定懶載入。如果設為 ...