Mybatis的缓存
引入: 在我们执行同一条查询操作的SQL语句时,Mybatis是访问数据库呢,还是添加到Mybatis的缓存呢
一、Myabtis的一级缓存
Mybatis一级缓存的级别是SqlSession级别的,通过同一个SqlSession查询的数据会被缓存,下次查询相同的数据,就会从缓存中拿取,而不是重新访问数据库
介绍一级缓存失效的4种情况:
①不同的SqlSession对应不同的一级缓存
②同一个SqlSession但是查询条件不同
③同一个SqlSession两次查询期间执行了任何一次增删改操作
④同一个SqlSession两次查询期间手动清空了缓存
SqlSession对象工具类
public static SqlSession getSqlSession(){
SqlSession sqlSession = null;
try{
InputStream is = Resources.getResourceAsStream(“mybatis-config.xml”);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
sqlSession = sqlSessionFactory.openSession(true);
}catch (IOException e) {
e.printStackTrace();
}
return sqlSession;
}
Emp getEmpById(@Param("eid") Integer eid);
@Test
public void testGetEmpById(){
SqlSession sqlSession1 = SqlSessionUtils.getSqlSession();
CacheMapper mapper1 = sqlSession1.getMapper(CacheMapper.class);
Emp emp1 = mapper1.getEmpById(1);
/*
演示一级缓存失效的情况
int result = mapper1.insertEmp(new Emp(null,"jack",18,"男","123@qq.com"));
System.out.println(result);
*/
sqlSession1.clearCache(); //手动清理缓存
Emp emp2 = mapper1.getEmpById(1);
System.out.println(emp1);
System.out.println(emp2);