关于mybatis缓存配置讲解
一級緩存:
一級緩存是默認的.
測試:在WEB頁面同一個查詢執行兩次從日志里面看同樣的sql查詢執行兩次。
2次sql查詢,看似我們使用了同一個sqlSession,但是實際上因為我們的dao繼承了SqlSessionDaoSupport,而SqlSessionDaoSupport內部sqlSession的實現是使用用動態代理實現的,這個動態代理sqlSessionProxy使用一個模板方法封裝了select()等操作,每一次select()查詢都會自動先執行openSession(),執行完close()以后調用close()方法,相當于生成了一個新的session實例,所以我們無需手動的去關閉這個session()(關于這一點見下面mybatis的官方文檔),當然也無法使用mybatis的一級緩存,也就是說mybatis的一級緩存在spring中是沒有作用的.
二級緩存:
配置:
<mapper namespace="com.cnblogs.yjmyzz.mybatis.mapper.OrderMapper">
<cache
eviction="LRU"
flushInterval="60000"
size="1024"
readOnly="true"
/>
...
</mapper>
這里有幾個要注意的地方:
eviction是緩存的淘汰算法,可選值有"LRU"、"FIFO"、"SOFT"、"WEAK",缺省值是LRU
flashInterval指緩存過期時間,單位為毫秒,60000即為60秒,缺省值為空,即只要容量足夠,永不過期
size指緩存多少個對象,默認值為1024
readOnly是否只讀,如果為true,則所有相同的sql語句返回的是同一個對象(有助于提高性能,但并發操作同一條數據時,可能不安全),如果設置為false,則相同的sql,后面訪問的是cache的clone副本。
上面這個是全局設置,在每條單獨的sql語句上,還可以有局部設置,比如:
<select id="getOrder" parameterType="int" resultType="TOrder" useCache="false">
...
</select>
useCache="false"表示該select語句不使用緩存(即使xml最開頭的全局cache啟用)
默認情況下,如果全局開啟了緩存,insert/update/delete成功后,會自動刷新相關的緩存項,但有一點要特別注意:在mybatis與hibernate混用時,由于mybatis與hibernate的緩存是無關的,如果用mybatis做select查詢,用hibernate做insert/update/delete,hibernate對數據的修改,并不會刷新mybatis的緩存。
總結
以上是生活随笔為你收集整理的关于mybatis缓存配置讲解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习——HMM & CRF
- 下一篇: Linux基础(6)