缓存机制的作用
有效降低用户访问物理设备的频次,提高用户响应速度
分类
1.MyBatis自身缓存:一级缓存、二级缓存
2.Redis缓存 读取10万次 /s 写8.6万次/s
一级缓存
默认开启一级缓存,可以在同一个sqlsession对象中查询相同的数据,实现数据共享
测试代码
/*一级缓存测试1*/
@Test
public void test5(){
SqlSession sqlSession = sqlSessionFactory.openSession(true);
DeptMapper mapper = sqlSession.getMapper(DeptMapper.class);
Dept dept= new Dept();
List<Dept> list=mapper.findAll(dept);
List<Dept> list2=mapper.findAll(dept);
System.out.println(list==list2);//返回true
sqlSession.close();
}
/*一级缓存测试2*/
@Test
public void test6(){
SqlSession sqlSession = sqlSessionFactory.openSession(true);
DeptMapper mapper = sqlSession.getMapper(DeptMapper.class);
Dept dept= new Dept();
List<Dept> list=mapper.findAll(dept);
SqlSession sqlSession2 = sqlSessionFactory.openSession(true);
DeptMapper mapper2 = sqlSession2.getMapper(DeptMapper.class);
Dept dept2= new Dept();
List<Dept> list2=mapper2.findAll(dept);
System.out.println(list==list2);//返回false
sqlSession.close();
}
综上所述,MyBatis中的一级缓存是默认开启的,且只在一个sqlSession中生效
二级缓存
也是默认开启的,但是需要手动标识,可以在同一个sqlSessionFactory内部有效,是全部配置
二级缓存标识
在对应的映射文件中添加<cache/>标签
错误示范
原因:sqlSession查询数据之后,业务逻辑执行成功,并且关闭之后,一级缓存才能将数据交给二级缓存保管,所以此处需要先关闭sqlSession