mybatis 开启使用 默认的 二级缓存

标题1, mybatis 默认二级缓存是没有开启的,

虽然网上说了,全部开启二级缓存是有风险和可能造成一些数据不一致性的问题。 但是有时候 查询的时候 ,特别是 循环 查询的时候, 会比较慢,这样时候使用二级缓存就 非常的好了,代码都不需要修改,效率会比较高。也不需要 使用 第三方的缓存的

如何开启二级缓存和使用呢

网上百度了一下,其实看到我有点 糊涂,到底应该怎样才算是开启呢,而且 我们不 应该全局开启二级缓存的, 这样 真的很容易出现问题,我们一般需要开启的是 某个 namespace 就是 某个 sql ,, xml 。 开启某个namespace 的二级缓存是 不需要 开启全局的二级缓存的,这个不要忽略了。

这里面说明一下 ,全局的二级缓存开启时这样的 ,默认 全局的二级缓存是 关闭的:

<settings>
    <setting name="cacheEnabled" value="true"/>
    </settings>

如何开启某个namespace 的二级缓存

这个才是重点,才是我们需要的。默认 namespace的 二级缓存也是关闭的 开启某个 namespace , ,, 如果我们开启了 全局的 二级缓存了,默认 所有的 namespace 的二级缓存都是开启的,这个不需要配置开启的,,, 在 全局的二级缓存没有开启的情况下,开启:

<mapper namespace="com.leshang.erp.server.shopserver.dao.CategoryDao">

   <cache/> 

只需要 加上 <cache/> 就算开启了。。。

默认 整个 namespace 下面的 所有 select 查询都是 开启了 二级缓存的, 删除,更新,插入的时候, 整个 namespace 的二级缓存就被清空了,下次请求的时候回去 请求数据库,然后将 数据缓存下来的。

因为:

 useCache="true"  默认都是 true的:

<select id="treeCategory" resultMap="treeCategoryMap"  useCache="true">
		select id,name,upId from category where upId=#{id} AND del=0
	</select>


当然如何我们 要某个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

转载于:https://my.oschina.net/ouminzy/blog/1162611

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值