關於mybatis快取配置講解

2021-07-10 14:07:30 字數 1084 閱讀 5870

一級快取:

一級快取是預設的.

測試:在web頁面同乙個查詢執行兩次從日誌裡面看同樣的sql查詢執行兩次。

2次sql查詢,看似我們使用了同乙個sqlsession,但是實際上因為我們的dao繼承了sqlsessiondaosupport,而sqlsessiondaosupport內部sqlsession的實現是使用用動態**實現的,這個動態**sqlsessionproxy使用乙個模板方法封裝了select()等操作,每一次select()查詢都會自動先執行opensession(),執行完close()以後呼叫close()方法,相當於生成了乙個新的session例項,所以我們無需手動的去關閉這個session()(關於這一點見下面mybatis的官方文件),當然也無法使用mybatis的一級快取,也就是說mybatis的一級快取在spring中是沒有作用的.

二級快取:

配置:

這裡有幾個要注意的地方:

eviction是快取的淘汰演算法,可選值有"lru"、"fifo"、"soft"、"weak",預設值是lru

flashinterval指快取過期時間,單位為毫秒,60000即為60秒,預設值為空,即只要容量足夠,永不過期

size指快取多少個物件,預設值為1024

readonly是否唯讀,如果為true,則所有相同的sql語句返回的是同乙個物件(有助於提高效能,但併發操作同一條資料時,可能不安全),如果設定為false,則相同的sql,後面訪問的是cache的clone副本。

上面這個是全域性設定,在每條單獨的sql語句上,還可以有區域性設定,比如:

...

usecache="false"表示該select語句不使用快取(即使xml最開頭的全域性cache啟用)

預設情況下,如果全域性開啟了快取,insert/update/delete成功後,會自動重新整理相關的快取項,但有一點要特別注意:在mybatis與hibernate混用時,由於mybatis與hibernate的快取是無關的,如果用mybatis做select查詢,用hibernate做insert/update/delete,hibernate對資料的修改,並不會重新整理mybatis的快取。

mybatis快取配置

使用快取可以使應用更快地獲取資料,避免頻繁的資料庫互動,通俗點講就是加快查詢速度。一般mybatis快取,都是指二級快取,一級快取缺省會開啟。myatis的一級快取存在於sqlsession的生命週期中,在同乙個sqlsession中查詢時,mybatis會把執行的方法和引數通過演算法生成快取的鍵值...

Mybatis快取配置

pom檔案配置 org.mybatis mybatis 3.4.1 org.mybatis mybatis spring 1.3.0 org.mybatis.caches mybatis ehcache 1.1.0 net.sf.ehcache ehcache core 2.5.3 spring載入...

Mybatis快取配置

pom檔案配置 org.mybatis mybatis 3.4.1 org.mybatis mybatis spring 1.3.0 org.mybatis.caches mybatis ehcache 1.1.0 net.sf.ehcache ehcache core 2.5.3 ehcache....