mybatis一級快取

2021-09-29 18:40:51 字數 884 閱讀 8851

@autowired

private sqlsessionfactory sqlsessionfactory;

@autowired

@test

@transactional

public void test() ",selectall.size());

log.info("第2次查詢{}",selectall2.size());

}

同乙個sqlsession才會觸發以及快取。

通過註解的話需要加事物才會觸發,因為事物裡面會復用sqlsession。

主要是有乙個executor,mybatis一級快取實際上就是乙個依賴於sqlsession的快取物件,perpetualcache裡面的結構很簡單,通過乙個k-v結構的cache維護快取資料。

public class perpetualcache implements cache {

private final string id;

private mapcache = new hashmap();

perpetualcache的生命週期是和sqlsession相關的,即只有在同乙個sqlsession中,一級快取才會用到。如果會話介紹,則快取會清空;

如果sqlsession呼叫了close()方法,會釋放掉一級快取perpetualcache物件,一級快取將不可用;

如果sqlsession呼叫了clearcache(),會清空perpetualcache物件中的資料,但是該物件仍可使用;

sqlsession中執行了任何乙個update操作(update()、delete()、insert()) ,都會清空perpetualcache物件的資料,但是該物件可以繼續使用;

MyBatis 一級快取

本地快取作用域預設為該sqlsession。當session flush或 close後,該session中的所有cache將清空。同一次會話期間,只要查詢過的資料都會儲存在當前sqlsession的乙個map中 key hashcode 查詢sql的id 編寫的sql語句 引數 1.不同的sqls...

mybatis一級快取

mybatis一級快取在沒有使用事務後,本地看不到效果,查詢時還是查詢了兩次資料庫。如下圖所示 開啟事務,在同乙個方法 同乙個回話,一級快取才有效果 transactional public refund getrefundtest long brefundid 加上事務後效果如下 一級快取什麼時候...

MyBatis 快取 上 一級快取

在實際專案中,有些情況下相同的查詢語句可能被重複執行,mybatis 提供了一級快取來優化這種情況,相同的查詢 sql 會命中一級快取,直接返回,減少不必要的資料庫查詢提高效能。上面提到了資料庫 crud 操作最終都對映到了executor query和executor update方法上,當資料庫...