标题1, mybatis 默认二级缓存是没有开启的,
虽然网上说了,全部开启二级缓存是有风险和可能造成一些数据不一致性的问题。 但是有时候 查询的时候 ,特别是 循环 查询的时候, 会比较慢,这样时候使用二级缓存就 非常的好了,代码都不需要修改,效率会比较高。也不需要 使用 第三方的缓存的
如何开启二级缓存和使用呢
网上百度了一下,其实看到我有点 糊涂,到底应该怎样才算是开启呢,而且 我们不 应该全局开启二级缓存的, 这样 真的很容易出现问题,我们一般需要开启的是 某个 namespace 就是 某个 sql ,, xml 。 开启某个namespace 的二级缓存是 不需要 开启全局的二级缓存的,这个不要忽略了。
这里面说明一下 ,全局的二级缓存开启时这样的 ,默认 全局的二级缓存是 关闭的:
如何开启某个namespace 的二级缓存
这个才是重点,才是我们需要的。默认 namespace的 二级缓存也是关闭的 开启某个 namespace , ,, 如果我们开启了 全局的 二级缓存了,默认 所有的 namespace 的二级缓存都是开启的,这个不需要配置开启的,,, 在 全局的二级缓存没有开启的情况下,开启:
只需要 加上 <cache/> 就算开启了。。。
默认 整个 namespace 下面的 所有 select 查询都是 开启了 二级缓存的, 删除,更新,插入的时候, 整个 namespace 的二级缓存就被清空了,下次请求的时候回去 请求数据库,然后将 数据缓存下来的。
因为:
useCache="true" 默认都是 true的:
当然如何我们 要某个select 不进行二级缓存可以设置 useCache="false " 就可以了。。。
即 只有 设置了,全局的二级缓存和 namespace的 二级缓存 : useCache="true" 才会生效的。
这里特别 说明一点,, namespace 对应的 model 必须实现序列化,否则二级缓存 会不成功的,甚至会报错:
Cause: java.io.NotSerializableException
实现序列化: xxx implements Serializable 即可
参考地址: http://www.jb51.net/article/109309.htm 以及http://www.cnblogs.com/QQParadise/articles/5109633.html