弹簧引导基础学习之Mybatis操作中使用复述做缓存详解

  

  

这篇博客学习下Mybatis操作中使用复述做缓存。这里其实主要学习几个注解:@CachePut, @Cacheable, @CacheEvict @CacheConfig。

  

下面话不多说了,来一起看看详细的介绍吧

  

  

<强> @Cacheable

  

@Cacheable的作用主要针对方法配置,能够根据方法的请求参数对其结果进行缓存

  

           参数   解释   例子               价值   缓存的名称,在春天配置文件中定义,必须指定至少一个   例如:   @Cacheable (value=https://www.yisu.com/zixun/mycache)   @Cacheable (value=https://www.yisu.com/zixun/{“cache1”、“cache2”}         关键   缓存的关键,可以为空,如果指定要按照?表达式编写,如果不指定,则缺省按照方法的所有参数进行组合   @Cacheable(值=皌estcache”键=" #用户名")         条件   缓存的条件,可以为空,使用?编写,返回真实或者假,只有为真实才进行缓存   @Cacheable (value=皌estcache”,条件=" # userName.length ()> 2”)            

  

<强>,@CachePut

  

@CachePut的作用主要针对方法配置,能够根据方法的返回值对其结果进行缓存,和@Cacheable不同的是,它每次都会触发真实方法的调用,在其他地方写的是根据方法的请求参数对其结果进行缓存,实际是按方法返回值进行缓存的,这里我就遇到了一个坑,我开始的时候是在Mybatis的映射层进行缓存的,如下面的代码。但是缓存到复述的是零值,今天看了一博友的博客,交流了一下,才知道它缓存的是方法的返回值,如果把下面更新的返回值该为int,在复述中保存的是int类型,报的错误是int无法转换成用户对象。

        @CachePut(值=" https://www.yisu.com/zixun/user "键=" # p0.id ")   @Update({“更新用户组名称=#{名称},年龄=#{时代},id=# {id} "})   无效更新用户(用户);      

           参数   解释   例子               价值   缓存的名称,在春天配置文件中定义,必须指定至少一个   @CachePut (value=https://www.yisu.com/zixun/盎捍妗?         关键   缓存的关键,可以为空,如果指定要按照?表达式编写,如果不指定,则缺省按照方法的所有参数进行组合   @CachePut(值=皌estcache”键=" #用户名")         条件   缓存的条件,可以为空,使用?编写,返回真实或者假,只有为真实才进行缓存   @CachePut (value=皌estcache”,条件=" # userName.length ()> 2”)            

  

<强>,@CachEvict

  

, @CachEvict的作用主要针对方法配置,能够根据一定的条件对缓存进行清空

  

           参数   解释   例子               价值   缓存的名称,在春天配置文件中定义,必须指定至少一个   @CacheEvict (value=https://www.yisu.com/zixun/盎捍妗?         关键   缓存的关键,可以为空,如果指定要按照?表达式编写,如果不指定,则缺省按照方法的所有参数进行组合   @CacheEvict(值=皌estcache”键=" #用户名")         条件   缓存的条件,可以为空,使用?编写,返回真实或者假,只有为真实才进行缓存   @CacheEvict (value=皌estcache”,条件=" # userName.length ()> 2”)         allEntries   是否清空所有缓存内容,缺省为假,如果指定为真,则方法调用后将立即清空所有缓存   @CachEvict (value=" testcache allEntries=true)         beforeInvocation   是否在方法执行前就清空,缺省为假,如果指定为真,则在方法还没有执行的时候就清空缓存,缺省情况下,如果方法执行抛出异常,则不会清空缓存   @CachEvict (value=" testcache beforeInvocation=true)            

  

<强> @CacheConfig

  

所有的@Cacheable()里面都有一个价值=皒xx”的属性,这显然如果方法多了,写起来也是挺累的,如果可以一次性声明完那就省事了,有了@CacheConfig这个配置,@CacheConfig是一个类级别注释,允许共享缓存名称,如果你在你的方法写别的名字,那么依然以方法的名字为准。

  

  

还是在上一博客演示的基础上进行修改,原本是在Mybatis的映射层上增加缓存注解,但由于更新返回值为空白,所以这里又增加了一层服务,映射层算是DAO层。这里使用了@CacheConfig注解指定类级别属的价值性,如果在方法上定义就以方法为主,就近原则。

弹簧引导基础学习之Mybatis操作中使用复述做缓存详解