學習Mybatis(3):快取
阿新 • • 發佈:2018-12-28
Mybatis預設只開啟了一級快取(SqlSession級),沒有開啟二級快取(SqlSessionFactory級),需要開啟的話,可以在Mapper檔案中寫上
<cache/>
快取開啟後:
1.需要使用SqlSession::commit()方法才會提交操作
2.如果resultType是一個POJO類,那麼需要實現Serializeable介面
沒有特定配置的情況下:
如果使用select操作,會優先從快取讀取值
如果使用了insert、update、delete等操作,會重新整理快取
也可以使用flushCache或useCache進行控制
例如:
<select id="…" resultType="…" parameterType="…" useCache="false">……</select>
就不會從二級快取讀取
<insert id="…" parameterType="…" flushCache="false">……</insert>
就不會重新整理快取
cache標籤的高階屬性:
- eviction:回收策略,有LRU、FIFO、SOFT、WEAK等
- flushInterval:重新整理間隔,單位ms
- size:快取大小(個)
- readOnly:是否允許修改
- type:快取型別,用來使用自定義快取
自定義快取
Mybatis快取是基於HashMap實現的(org.apache.ibatis.cache.impl.PerpetualCache類),如果想用更高階的快取(比如Redis),需要自己實現
方法:實現Cache介面
介面如下:
package org.apache.ibatis.cache; import java.util.concurrent.locks.ReadWriteLock; public interface Cache { String getId(); void putObject(Object var1, Object var2); Object getObject(Object var1); Object removeObject(Object var1); void clear(); int getSize(); ReadWriteLock getReadWriteLock(); }
實現以後,將實現類配置到cache標籤的type屬性即可