mybatis 一級快取 二級快取

2021-10-03 09:13:47 字數 1289 閱讀 3040

一級快取是sqlsession級別的快取。在運算元據庫時需要構造 sqlsession物件,在物件中有乙個(記憶體區域)資料結構(hashmap)用於儲存快取資料。不同的sqlsession之間的快取資料區域(hashmap)是互相不影響的。

mybatis預設開啟一級快取。

一級快取的作用域是同乙個sqlsession,在同乙個sqlsession中兩次執行相同的sql語句,第一次執行完畢會將資料庫中查詢的資料寫到快取(記憶體),第二次會從快取中獲取資料將不再從資料庫查詢,從而提高查詢效率。當乙個sqlsession結束後該sqlsession中的一級快取也就不存在了。

@test

public void testcache1() throws exception

如果不commit的錯誤流程為:

開始執行時,開啟事務,建立sqlsession物件

更新資料

aop控制 只要方法結束,sqlsession關閉 sqlsession關閉後就銷毀資料結構,清空快取

service結束sqlsession關閉

開始執行時,開啟事務,建立sqlsession物件

更新資料

清空commit

aop控制 只要方法結束,sqlsession關閉 sqlsession關閉後就銷毀資料結構,清空快取

service結束sqlsession關閉

只要是在同乙個sqlssesion中,一級快取才會生效,如果sqlssesion.commit()或者是sqlsession.close()就會清空sqlssion,一級快取也隨之消失。

sqlmapconfig.xml中

下面是開啟redis快取:

...至於具體的redis與mybatis的整合請參見:

public class userimplements serializable
執行流程:

sqlsession1中使用finduserbyid(1)

關閉sqlsession1

sqlsession3中使用finduserbyid(1),從快取中取出資料

sqlsession3.commit();

sqlsession3.close()

sqlsession2中使用finduserbyid(1)無法拿到資料(commit重新整理二級快取)

sqlsession2.close()

參考文獻:

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語...