提到MyBatis的缓存,首先需要了解一下缓存是什么。
一、缓存
1.1 什么是缓存
缓存是服务器内存的一块区域。
1.2 什么样的数据适合使用缓存
经常访问但又不会时时发生变化的数据。
1.3 缓存的设计目的
提高查询速度,减轻数据库访问压力。MyBatis也自带了缓存。
二、MyBatis一级缓存(sqlSession级别的缓存)
MyBatis自带一级缓存且不可卸载
特点:随着sqlSession的创建而存在,随着SqlSession的销毁而销毁,每一个SqlSession都有自己的独立空间。
// 测试一级缓存
@Test
public void testOneCache() throws Exception {
SqlSession sqlSession = MybatisUtils.openSession();
// 创建
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user1 = userMapper.findById(41);
System.out.println("第一次查询:" + user1);
User user2 = userMapper.findById(41);
System.out.println("第二次查询:" + user2);
sqlSession.close();
}
一级缓存执行流程
二、MyBatis二级缓存
SqlSessionFactory级别的缓存,可以被多个sqlSession共用
MyBatis二级缓存不是自带的,需要进行配置。配置过程如下:
1.需要在mapper配置文件中开启使用二级缓存
<!--声明使用二级缓存-->
<cache/>
2. 实体类对象需要实现序列化接口*
public class User implements Serializable
3. 操作的过程中需要提交之后才会存入到二级缓存**
查询数据提交到二级缓存中:sqlsession.commit | sqlsession.close
但是二级缓存一般不用,在实际的开发中,会用到Redis缓存技术。