MyBatis 快取詳解 一級快取驗證

2021-10-11 16:34:29 字數 663 閱讀 7429

(基於mybatis-standalone 工程,注意演示一級快取需要先關閉二級快取,localcachescope 設定為session)

判斷是否命中快取:如果再次傳送sql 到資料庫執行,說明沒有命中快取;如果直接列印物件,說明是從記憶體快取中取到了結果。

1、在同乙個session 中共享

2、不同session 不能共享

sqlsession session1 = sqlsessionfactory.opensession();
ps:一級快取在baseexecutor 的query()——queryfromdatabase()中存入。在queryfromdatabase()之前會get()。

3、同乙個會話中,update(包括delete)會導致一級快取被清空

session.commit();

一級快取是在baseexecutor 中的update()方法中呼叫clearlocalcache()清空的(無條件),query 中會判斷。

如果跨會話,會出現什麼問題?

4、其他會話更新了資料,導致讀取到髒資料(一級快取不能跨會話共享)

// 會話2 更新了資料,會話2 的一級快取更新

session2.commit();

// 會話1 讀取到髒資料,因為一級快取不能跨會話共享

mybatis一級快取詳解

1.mybatis一級快取 一級快取 sqlsession快取 會話快取 預設開啟,使用者不能關閉 有方法讓其失效 通過同乙個sqlsession呼叫同乙個查詢方法兩次,第二次查詢走的快取。下面我們就看看一級快取怎麼儲存的?在建立sqlsession的時候會建立executor baseexecut...

MyBatis 快取詳解 一級快取(本地快取)介紹

一級快取也叫本地快取,mybatis 的一級快取是在會話 sqlsession 層面進行快取的。mybatis 的一級快取是預設開啟的,不需要任何的配置。首先我們必須去弄清楚乙個問題,在mybatis 執行的流程裡面,涉及到這麼多的物件,那麼快取perpetualcache 應該放在哪個物件裡面去維...

mybatis一級快取

autowired private sqlsessionfactory sqlsessionfactory autowired test transactional public void test selectall.size log.info 第2次查詢 selectall2.size 同乙個s...