1.什么是缓存?
- 缓存就是我们查询的时候去历史记录里面寻找,找到了就不用执行查询语句去再一次接触数据库了
- 缓存是以namespace为单位的,不同的namespace下的操作互不影响,但刷新缓存是刷新整个namespace的缓存,相当于update;
2.Mybatis的缓存机制整体设计以及二级缓存的工作模式
(1)一级缓存:一级缓存,Mybatis已然为我们开启了,但是我们关闭不了,只能通过手动关闭,(sqlsession级别)
- 在同一个sqlsession中Mybatis会把执行的方法和参数生成算法来生成缓存的键值,将键值和结果放在一个Map中;
- 不同的sqlsession之间的缓存数据是相互隔离的
- 任何的update select delete语句都会清除缓存
- Executor执行操作时会去PerpetualCache中的HashMap中根据cacheKey查询缓存
(2) 二级缓存:二级缓存需要我们手动开启,(mapper级别)
-
如果用户配置了“cacheEnabled=true”,那么Executor对象会加上一个装饰者CachingExecutor,以增强Executor功能,使其具有缓存查询的功能,这时,sqlsession使用CachingExecutor来完成请求,CachingExecutor先判断在Application级别的二级缓存中是否由缓存结果,如果有查询结果,则直接返回,否则,交给真正的Executor对象来完成操作,且CachingExecutor会将Executor返回的结果放置到缓存中,然后返回给用户
-
二级缓存存数据的地方:Configuration中
-
二级缓存的实现:Cache接口的装饰器
-
一级缓存与二级缓存的使用顺序: 二级缓存—>一级缓存—>数据库
3.开启二级缓存
- 配置全局变量参数:(总开关)
<settings>
<!--开启二级缓存-->
<setting name="cacheEnabled" value="true"/>
<