深入MyBatis 快取機制

2021-09-12 14:01:55 字數 1068 閱讀 3440

mybatis快取機制

mybatis系統預設定義了兩層快取

一級快取和二級快取

一級快取

一級快取即本地快取,作用域預設為sqlsession。當session flush或close後,該session中的所有cache將被清空。本地快取不能被關閉,但可以呼叫clearcache()來清空本地快取,或者改變快取的作用域。

同一次會話期間只要查詢過的資料都會儲存在當前sqlsession的乙個map中

key-hashcode+查詢的sqlid+編寫的sql查詢語句+引數

一級快取失效的4種情況

不同的sqlsession對應不同的快取

同乙個sqlsession但是查詢條件不同

同乙個sqlsession兩次查詢期間執行了任何一次增刪改操作

同乙個sqlsession兩次查詢期間清空了快取

二級快取

二級快取,即全域性作用域快取。二級快取預設不開啟,需要手動配置,二級快取在sqlsession關閉或提交後才會生效

工作機制

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

如果會話關閉,同時二級快取有開啟得話,一級快取中的資料會被儲存到二級快取中;新的會話資訊會參照二級快取,即會話會先檢視二級快取再檢視一級快取

使用步驟

cache標籤下快取相關屬性

快取有關的設定及其屬性

1.全域性配置下的cacheenable:-配置二級快取的開關,一級快取是一直開啟的

2. select標籤的usecache屬性:-配置這個屬性決定select是否使用二級快取,一級快取是一直使用的

3. sql標籤的flushcache屬性:-增刪改預設flushcache=true。sql執行以後,會同時清空一級和二級快取,查詢預設flushcache為false

4. sqlsession.clearcache():只是用來清除一級快取

5. 當在某個作用域下進行了c/u/d操作,預設該作用域下所有select中的快取將被clear

mybatis快取機制

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

MyBatis 快取機制

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

Mybatis 快取機制

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