mybatis 缓存的默认值

Select 的时候,缓存默认是打开的;

CUD 的时候,缓存默认是关闭的;

 

转自:http://yedward.net/?id=314

之前在利用MyBatis做开发的时候,遇到了一个问题,使用select配置的时候发现前后两次的结果是一样的,并且使用statementType="CALLABLE"配置,然后在配置中写PL/SQL代码去更新数据库的时候,发现只更新了第一次,第二次在对传进来的参数没有变化的情况下,就不会在进入PL/SQL代码中执行。后来发现,这是由于MyBatis缓存的原因。

在MyBatis中有flushCache、useCache这两个配置属性,分为下面几种情况:

(1)当为select语句时:

flushCache默认为false,表示任何时候语句被调用,都不会去清空本地缓存和二级缓存。

useCache默认为true,表示会将本条语句的结果进行二级缓存。

(2)当为insert、update、delete语句时:

flushCache默认为true,表示任何时候语句被调用,都会导致本地缓存和二级缓存被清空。

useCache属性在该情况下没有。

上面的信息我是从MyBatis官方文档中找到的,会发现当为select语句的时候,如果没有去配置flushCache、useCache,那么默认是启用缓存的,所以,如果有必要,那么就需要人工修改配置,修改结果类似下面:

<select id="save" parameterType="XXXXXEO" statementType="CALLABLE" flushCache="true" useCache="false">
    ……
</select>

上面的statementType="CALLABLE"这个属性是我的项目中需要用到的,如果用不到就不用管它,注意后面的flushCache="true"和useCache="false",做了如上设置以后,发现问题就解决了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot和MyBatis框架可以很好地结合使用,并且支持二级缓存的配置和使用。 二级缓存MyBatis提供的一种缓存机制,用于缓存查询结果,减少数据库的访问次数,提高系统性能。它是基于Mapper级别的缓存,不同的Mapper之间的缓存互相独立。在配置和使用二级缓存时,需要注意以下几点: 1. 在Spring Boot的配置文件中,通过配置`mybatis.configuration.cache-enabled`属性来开启或关闭MyBatis的二级缓存,默认情况下是开启的。 2. 在Mapper接口对应的XML文件中,可以通过`<cache>`标签配置二级缓存的相关属性。例如: ```xml <cache eviction="LRU" flushInterval="60000" size="1024" readOnly="true"/> ``` - `eviction`属性表示缓存的清除策略,常用的有LRU(最近最少使用)和FIFO(先进先出)。 - `flushInterval`属性表示缓存刷新间隔时间,单位为毫秒,默认值为不刷新(即0)。 - `size`属性表示缓存的最大容量,默认值为不限制。 - `readOnly`属性表示是否只读缓存默认值为false。 3. 在需要使用二级缓存的Mapper接口上添加`@CacheNamespace`注解,表示该Mapper接口启用了二级缓存。例如: ```java @CacheNamespace public interface UserMapper { // Mapper方法定义 } ``` 注意:需要确保Mapper接口所在的包路径在MyBatis的扫描路径中,以使其被正确加载。 4. 在需要缓存的查询方法上添加`@Cacheable`注解,表示该方法的结果将被缓存。例如: ```java @Cacheable User getUserById(Long id); ``` 通过`@Cacheable`注解,可以指定缓存的key、缓存的条件等。 需要注意的是,二级缓存只适用于单个应用的情况,如果是分布式部署的多个应用,建议使用分布式缓存来替代二级缓存。此外,对于频繁写操作的数据,也不适合使用二级缓存。 以上就是关于Spring Boot和MyBatis二级缓存的简单介绍和配置方法。希望能对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值