MyBatis缓存
使用缓存可以减少java应用与数据库的交互次数,从而提升程序的运行效率。比如查询出ID=1的对象,第一次查询出之后会自动将该对象保存到缓存中,当下一次查询时,直接从缓存中取出对象即可,无需再次访问数据库
MyBatis缓存分类
1.一级缓存:sqlSession级别。默认开启 并且不能关闭
操作数据库是需要创建SQLSession 对象,在对象中有一个HashMap用于存储缓存数据,不同的SqlSession之间缓存数据区域互不影响的。
作用域是Sqlsession范围,当在同一个Sqlsession中执行两次相同的SQL语句时,第一次执行完会将结果保存到缓存中,第二次查询时直接存缓存中获取
注意:如果执行了()DML操作)insert delete update时,Mybatis必须将缓存清空,保证数据的准确性
2.二级缓存:Mapper级别,默认关闭,可以开启
使用二级缓存时,多个SqlSession使用同一个Mapper的sql语句操作数据库,得到的数据会存在二级缓存区,同样是使用HashMap进行存储数据,相较于一级缓存,二级缓存的范围更大,多个sqlSession可以共用二级缓存,二级缓存是跨sqlSession的
二级缓存是对个SqlSession共享的,其作用域是是Mapper的同一个namespace,不同的SqlSession两次执行相同的namespace下的sql语句,参数也相等。这第一次执行成功后会将数据保存到二级缓存中,第二次可直接从二级缓存中取出数据
Mybatis自带的二级缓存
1.config.xml配置二级缓存
<settings>
<!-- 开启二级缓存-->
<setting name="cacheEnabled" value="true"/>
</settings>
2.mapper中添加配置
<mapper namespace="com.biubiu.mappers.DeptMapper">
<cache></cache>
<mapper/>
3.实体类实现序列化接口
public class Dept implements Serializable{}
第三方依赖
pom.xml中添加相关依赖
添加ehcache.xml
conig.xml配置二级缓存
mapper.xml中配置二级缓存
实体类不需要实现序列化接口