首先,要开启缓存:
<setting name="cacheEnabled" value="true" />
然后,使用二级缓存:
<!-- 缓存一分钟 -->
<cache flushInterval="60000" readOnly="true"/>
使用就这么简单。
但是,本文的目的不是使用,而是要看下使用的效果。
先看看配置了缓存的mapper中都配置了什么语句:
一个查询所有的语句:
<select id="findAll" resultType="account">
select * from account
</select>
一个保存的语句:
<insert id="save" parameterType="account" useGeneratedKeys="true" keyProperty="id">
insert into account(username,status) values(#{username}, 0)
</insert>
对此,我们可以测试findAll是否有利用上缓存了,以及save语句对缓存的影响。(记得日志先开启DEBUG)
首先,我们先通过请求,调用到save语句,实现插入几条数据,过程就省略不说了。
第二步,我们调用findAll的查询请求,如下:
http://localhost/account/findAll.action
得到的结果(这里比较简单,直接转json输出了):
[{"id":1,"status":0,"username":"123456"},{"id":2,"status":0,"username":"654321"},{"id":3,"status":0,"username":"test4"},{"id":4,"status":0,"username":"test4"},{"id":5,"status":0,"username":"test4"},{"id":6,"status":0,"username":"test4"}]
可以看到,这里有6条数据。
再看控制台输出:
生成查询语句了,这是第一次。
第三步,我们刷新一下,第二次查询,结果自然是一样的,看控制台,呀,找不到sql语句了:
可以说是用上缓存了。
第四步,等待一分钟再刷新。第三次查询,结果一致,看控制台:
熟悉的sql又回来了。为什么?因为我配置的缓存有效期是1分钟,见上文。
ok,缓存可以有了,有效期也有效了。那么,更新操作对缓存的影响呢?我们不能更新了还取缓存啊。
第五步,先save两个对象进去,我们再刷新页面(一分钟内哦),然后看控制台:
哇,万能的sql语句出来了,记录数也是不一样了。
感叹一下,人家还是很智能滴,这样,是不是非常好用啊,使用简单,缓存可用,非常简单。至于原理嘛……咱以后再分析。