mybatis的快取機制

2021-08-13 17:28:11 字數 964 閱讀 3939

兩級快取

一級快取(本地快取)sqlsession級別的快取,一級快取是一直開啟的

與資料庫同一次會話期間,查詢到的資料會放在本地快取中,以後如果還需要獲取相同的資料,直接從快取中拿到。

一級快取失效的幾種情況

sqlsession 不同

sqlsession相同,但查詢條件不一樣

sqlsession相同,但兩次操作之間執行了增刪改。

sqlsession相同,但手動清除了快取。opensession.clearcache()屬於全域性快取,基於namespace級別的快取,乙個namespace對應乙個二級快取

工作機制

乙個會話,查詢一條資料,這個資料就會被放在當前會話的一級快取中。

如果會話關閉,一級快取中的資料就會被儲存到二級快取中,新的會話查詢資訊,就可以參照二級快取。在全域性配置檔案中,開啟全域性二級快取配置。

pojo需要實現序列化介面

<

cache eviction=

"" readonly=

"" flushinterval=

""type

="" size=

"" blocking=

"">>

全域性快取的關閉或者開啟對一級快取沒有影響。

在每乙個 增刪改 標籤裡面,都有乙個屬性flushcache,重新整理快取,預設為true。對一級二級都有影響。即在二級快取之間進行了增刪改操作,將讀取不到快取。

每個select 標籤都有 usecache屬性,預設為true,如果為false,則一級快取不受影響,二級快取不能使用。

sqlsession.clearcache();只能清除當前session的一級快取

在settings裡面,有乙個localcachescope屬性,有session|statement 兩個屬性,設定為 statement 禁用一級快取

mybatis快取機制

mybatis和hibernate一樣,也提供了一二級快取。若存在一二級快取,則資料不會去資料庫互動,而是去記憶體中獲取。一級快取是sqlsession級別的快取。在運算元據庫時需要構造sqlsession物件,在物件中有乙個資料結構 一般來說是hashmap 來儲存快取資料。不同的sqlsessi...

MyBatis 快取機制

mybatis 提供了查詢快取來獲取資料,以提高查詢的效能。mybatis 的快取分為一級快取和二級快取。1 一級快取一級快取是 sqlsession 級別的快取,是基於 hashmap 的本地快取。不同的 sqlsession 之間的快取資料區域互不影響。當同乙個 sqlsession 執行兩次相...

Mybatis 快取機制

查詢快取主要是為了提高查詢訪問速度,即當使用者執行一次查詢後,會將該資料結果放到快取中,當下次再執行此查詢時就不會訪問資料庫了而是直接從快取中獲取該資料。如果在快取中找到了資料那叫做命中。同一sqlsession 多次查詢同一sql時會使用快取 test public void testlocalc...