mybatis 3.x 已經支持cache功能了,使用很簡單,在mappper的xml文件里添加以下節點:
1 <mapper namespace="com.cnblogs.yjmyzz.mybatis.mapper.OrderMapper"> 2 3 <cache 4 eviction="LRU" 5 flushInterval="60000" 6 size="1024" 7 readOnly="true" 8 /> 9 ... 10 </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的緩存。