MyBatis一級快取 二級快取

2021-10-14 04:12:21 字數 1214 閱讀 5460

mybatis的一級快取是指sqlsession級別的快取。一級快取的作用域預設是乙個sqlsession。mybatis預設開啟一級快取。

第一次發出乙個查詢sql,sql 查詢結果寫入 sqlsession 的一級快取中,快取使用的資料結構是乙個 map。

同乙個 sqlsession 再次發出相同的 sql,就從快取中取出資料。

如果兩次中間出現 commit 操作(修改、新增、刪除,本 sqlsession 中的一級快取區域全部清空,下次再去快取中查詢不到所以要從資料庫查詢,從資料庫查詢到再寫入快取。

具體使用需要配置:

mybatis 全域性配置中啟用二級快取配置

>

name

="cacheenabled"

value

="true"

/>

settings

>

在對應的 select 查詢節點中新增 usecache=true

一級快取和二級快取分別是什麼時候進行儲存資料的?

一級快取:在查詢完就會儲存!

二級快取:在事務提交的時候才會儲存!

從快取中取資料時的順序是怎樣的?

取資料時會先去二級快取中取,如果二級快取中沒有,再去一級快取中拿!

一二級快取的資料型別是怎樣的?

使用二級快取必須保證:

只能在【只有單錶操作】的表上使用快取

在可以保證查詢遠遠大於insert,update,delete操作的情況下使用快取

多表操作一定不能使用快取:為什麼不能?

首先不管多表操作寫到那個namespace下,都會存在某個表不在這個namespace下的情況。

例如兩個表:role和user_role,如果我想查詢出某個使用者的全部角色role,就一定會涉及到多表的操作。

<

select id=

"selectuserroles" resulttype=

"userrolevo"

>

select

*from user_role a,role b where a.roleid = b.roleid and a.userid =

#<

/select

>

像上面這個查詢,你會寫到那個xml中呢??

如果你正好修改了這個使用者的角色,上面這個查詢使用快取的時候結果就是錯的。

mybatis快取 一級快取,二級快取

什麼是快取 為什麼使用快取 適用於快取的資料 二級快取的使用步驟 在主配置檔案配置 name cacheenabled value ture 讓當前的操作支援快取 在對映檔案中 select 標籤中配置 在select標籤中 新增乙個屬性 userscache true 先建立出乙個sqlsessi...

Mybatis快取(一級快取 二級快取)

mybatis快取分為一級快取 二級快取。mybatis一級快取預設是開啟的 二級快取全域性開關預設也是開啟的,但需要配置cachenamespace才可生效!以mybatis plus為例 mybatis plus configuration log impl org.apache.ibatis....

mybatis一級快取 二級快取

一級快取基於sqlsession,是預設開啟的,在運算元據庫時需要構造sqlsession物件,在物件中有乙個hashmap用於儲存快取資料。不同的sqlsession之間快取資料區域是互相不影響的。一級快取的作用域是sqlsession範圍的,當在同乙個sqlsession中執行兩次相同的sql語...