一 一级缓存
在mybatis
中一级缓存是自动启动的,不需要我们手动开启,也是sqlSession
级别的缓存,当sqlSession
关闭后,缓存也将被清空;
二 二级缓存
在mybatis
中,二级缓存需要我们手动开启,二级缓存和一级缓存最大的区别就是二级缓存的范围要比一级缓存大,二级缓存是namespace
级别的缓存,即多个mapper
如果它们的namespace
相同那么它们可以共享一个缓存。
使用步骤:
- 在
mybatis.xml
中开启二级缓存
<!--
缓存配置
-->
<setting name="cacheEnable" value="true"/>
- 在
mapper.xml
中配置cache
标签
<cache/>
- 需要缓存的
pojo
类需要实现序列化接口 - 测试
statement
的两个属性:
- useCache:是否使用缓存(默认是true)
- flushCache:刷新缓存,即每次执行
sql
后是否刷新缓存(清空),在执行update、insert、delete
等操作如果没有刷新还粗可能就会带来脏数据。
缺陷:
- 在执行
commit()
时,缓存会被清空 -
mybatis
二级缓存只是将数据简单的放入到内存中,安全性不高
三 EnCache 缓存
EnCache
是一个纯java
的缓存的框架,是一种广泛使用的分布式缓存。
使用步骤:
- 导入相关依赖
<!--缓存整合-->
<dependency>
<groupId>org.ehcache.modules</groupId>
<artifactId>ehcache-core</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>org.mybatis.caches</groupId>
<artifactId>mybatis-ehcache</artifactId>
<version>1.1.0</version>
</dependency>
- 引入缓存配置文件
ehcache.xml
- 在需要缓存的
mapper.xml
中导入配置 - 测试
demo(根据id查用用户信息)_10encache