有下列几个顶级元素:
# 一级缓存(默认开启,SqlSession级别的缓存)
我们通过MyBatis每连接一次数据库就会创建一个SqlSession表示一次数据库会话。MyBatis默认在SqlSession中建立一个简单的HashMap缓存,用于存放每次的查询结果。下图表示了一次查询的简单流程。
我们执行一次CRUD时,SqlSession会把工作都交给Executor执行器去完成。Cache缓存信息也是由Executor执行器进行维护的。下图展示了SqlSession、Executor、Cache之间的关系。
关于一级缓存的论述在http://blog.csdn.net/luanlouis/article/details/41280959中 描述的相当清晰明了,感谢亦山!!!(上面的两张图也是其中的,挪用一下哈)。
# 二级缓存(没有默认开启,应用级别的基于命名空间的缓存)
首先在xml配置文件(config.xml)中开启总开关:
<settings>
<setting name="cacheEnabled" value="true" />
</settings>
其次在XML映射文件中加入 <cache />
<mapper namespace="com.smileliu.pra.dao.UserMapper">
<cache/>
</mapper>
注意:需要给要缓存的对象执行序列号(implement Serializable)
如果要在某个查询上禁用,或者刷新二级缓存,可以在select上加入属性useCache="false",flushCache="true"。
原文:http://blog.51cto.com/liusw94/2058717