Mybatis缓存使用注意

众所周知,mybatis设计了两级缓存。

第一级是SqlSession维度的,同一个的SqlSession里面的相同查询,不会走DB,而是走SqlSession的缓存。一级缓存默认是开启的,需要注意的是,如果DB层面事务隔离级别 < RR,那么该缓存会产生和隔离级别不一样的语义(RR下的当前读也会产生问题)。

二级缓存是Application全局维度的,同样也存在上面隔离级别的问题。使用时需要特别注意:sql如果涉及到多表操作,例如多表join查询,如果join的目标表记录发生变化,缓存的的Key是sql statement和参数,一致的情况下,这里是感知不到的,仍然走缓存会导致读到脏数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis 提供了两种级别的缓存:本地缓存(Local Cache)和二级缓存(Second Level Cache)。下面是一个基本的 MyBatis 缓存代码设计示例: 1. 配置 MyBatis 缓存: 在 MyBatis 的配置文件,可以启用或禁用缓存,并指定缓存的实现方式。以下是一个示例配置: ```xml <configuration> <settings> <setting name="cacheEnabled" value="true" /> <!-- 启用缓存 --> </settings> ... </configuration> ``` 2. 配置 Mapper 接口: 在 Mapper 接口的方法上,可以使用 `@Options` 注解来配置缓存的行为。以下是一个示例配置: ```java @Options(useCache = true, flushCache = Options.FlushCachePolicy.DEFAULT) List<User> getUsers(); ``` 3. 实现对象的序列化: 如果要使用二级缓存,需要确保缓存的对象可以被序列化。因此,你的实体类需要实现 `Serializable` 接口。 4. 定义缓存策略: MyBatis 提供了一些缓存策略,如 LRU(最近最少使用)、FIFO(先进先出)和自定义。可以在配置文件设置全局缓存策略,或在 Mapper 接口的方法上使用 `@Options` 注解指定特定的缓存策略。 5. 清除缓存: 如果需要手动清除缓存,可以使用 `SqlSession` 的 `clearCache()` 方法来清除本地缓存,或使用 `SqlSessionFactory` 的 `clearCache()` 方法来清除二级缓存。 这是一个基本的 MyBatis 缓存代码设计示例,你可以根据实际需求进行调整和扩展。请注意缓存使用要考虑数据的一致性和性能问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值