(基於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...