MyBatis缓存

MyBatis缓存

一级缓存

MyBatis的一级缓存存在于SqlSession的生命周期中,在同一个SqlSession中查询时,MyBatis会把执行的方法和参数通过算法生成缓存的键值,将键值和查询结果存入一个Map对象中.如果同一个SqlSession中执行的方法和参数完全一致,那么通过算法会生成相同的键值,当Map中缓存对象中已经存在该键值时,则会返回缓存中的对象.

设置 flushCache="true"会在查询数据的时候清空当前一级缓存 可以避免以上情况.但是由于清空一级缓存,会影响当前的SqlSession中所有的缓存.因此在反复查询获取只读数据时要避免这样使用.

二级缓存

MyBatis的二级缓存存在于SqlSessionFactory的生命周期中.

全局配置(默认为"true"可以不用配置)

mybatis-config.xml

<settings>
 <!--其他配置-->
 <setting name="cacheEnabled" value="true"/>
</settings>

在保证全局二级缓存开启的情况下,在命名空间中添加元素即开启二级缓存

如在UserMapper.xml中:

<mapper namespace="tk.mybatis.simple.mapper.UserMapper">
 <cache/>
 <!--其他配置-->
</mapper>

cache可以配置的属性:

  • eviction(收回策略)

LRU(最近最少使用的):移除最长时间不被使用的对象,默认.

FIFO(先进先出):按对象进入缓存的顺序来移除他们

SOFT(软引用):移除基于垃圾回收器状态和软引用规则的对象

WEAK(弱引用):更积极的移除基于垃圾收集器状态和弱引用规则的对象

  • flushInterval(刷新间隔)

    • 任意正整数,代表合理的毫秒时间段
  • size(引用数目)

    • 可设置为任意正整数,默认1024
  • readOnly(只读)

    • true/false

如果是使用注解的方式,则在接口方法上配置@CacheNamespace

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值