老司机学习MyBatis之一级、二级缓存的相关设置详解

一、前言

前面两个章节,我们简单的介绍了一级缓存和二级缓存,并对它们的使用有了初步的了解,下面我们将从以下几个配置深入的了解一下几个常用的配置对一二级缓存的影响。

二、案例

①全局setting的cacheEnable

这个配置我们在使用二级缓存的时候有用到,如果配置成false,二级缓存会失效,那么对一级缓存有影响吗?

老司机学习MyBatis之一级、二级缓存的相关设置详解

修改测试方法

老司机学习MyBatis之一级、二级缓存的相关设置详解

测试结果:控制台打印了一条SQL语句,第二次查询从缓存中获取,说明cacheEnabled设置为false,一级缓存仍然存在。

②select标签的useCache属性

每个select标签都有一个useCache标签,那么这里到底使用的是一级缓存还是二级缓存呢?

老司机学习MyBatis之一级、二级缓存的相关设置详解

我们将useCache设置成false

测试一级缓存

老司机学习MyBatis之一级、二级缓存的相关设置详解

测试结果:控制台打印了一条SQL语句,第二次查询从缓存中获取,说明select标签的useCache属性设置成false,一级缓存仍然存在。

测试二级缓存

老司机学习MyBatis之一级、二级缓存的相关设置详解

测试结果:控制台打印了两条SQL语句,说明select标签的useCache属性设置成false,二级缓存失效了。

注意:如果设置了全局setting的cacheEnable为false,你的select标签的useCache属性设置成true,二级缓存也是无效的,需要将cacheEnable设置为true。

③insert,update,delete标签的flushCache属性

前面章节我们在做一级缓存测试的时候,如果两次查询之间进行了增删改操作后,一级缓存就会失效,这是什么原因呢?究其原因:是因为我们的每一个增删改标签上都有一个默认的属性配置flushCache,从字面上理解就是清理缓存。

老司机学习MyBatis之一级、二级缓存的相关设置详解

前面我们已经验证过,如果增删改操作后一级缓存失效,那么二级缓存也会失效吗?

修改二级缓存代码如下:

老司机学习MyBatis之一级、二级缓存的相关设置详解

测试结果:控制台打印了两条SQL语句,说明flushCache属性设置成true,二级缓存失效了。大家可以自己动手设置为false,看看是否会有所变化呢?

最终我们得出结论:当flushCache属性设置成true时,一二级缓存都会失效。

④select标签中也有一个flushCache属性,默认为false

select标签里面有一个flushCache属性,默认为false,如果设置成true,一二级缓存都会失效,这里就不再试验了,感兴趣的童鞋可以自己尝试一下就知道了。

 

 

 =======欢迎大家拍砖,小手一抖,多多点赞哟!=======

版权声明:本文为博主原创文章,允许转载,但转载必须标明出处。