mybatis有兩級(jí)緩存
一級(jí)緩存(默認(rèn)), session緩存, 基于PerpetualCache 的 HashMap本地緩存,在session flush或者close的時(shí)候?qū)⑾?/p>
SqlSession sqlSession = MyBatisUtil.getSqlSessionFactory().openSession(); //打開(kāi)
..
..
..
sqlSession .close(); //關(guān)閉
二級(jí)緩存,同樣也是基于PerpetualCache 的 HashMap本地緩存,不同在于其存儲(chǔ)作用域?yàn)?Mapper(Namespace),并且可自定義存儲(chǔ)源蠢箩,如 Ehcache诱咏。
<mapper namespace="me.gacl.mapping.userMapper">
<!-- 開(kāi)啟二級(jí)緩存 -->
<cache/>
image.png
如果實(shí)體類(lèi)不實(shí)現(xiàn)可序列化接口,使用二級(jí)緩存朝群,那么會(huì)報(bào)下列異常:
Exception in thread "main" org.apache.ibatis.cache.CacheException: Error serializing object. Cause: java.io.NotSerializableException: Teacher................
所以在二級(jí)緩存的時(shí)候?qū)嶓w一定要是實(shí)現(xiàn)Serializable
public class Teacher implements Serializable
{
}