MyBatis缓存
MyBatis一级缓存
- 一级缓存是SqlSession级别的,通过同一个SqlSession查询的数据会被缓存,下次查询相同的数据,就会从缓存中直接获取,不会去访问数据库
- 一级缓存失效的四种情况
- 不同的SqlSession对应不同的一级缓存
- 同一个SqlSession但查询条件不同
- 同一个SqlSession两次查询期间执行了任何一次增删改操作
- 同一个SqlSession两次查询期间手动清除了缓存
@Test
public void testGetEmp() {
SqlSession sqlSession1 = SqlSessionUtils.getSqlSession();
CacheMapper mapper1 = sqlSession1.getMapper(CacheMapper.class);
Emp emp1 = mapper1.getEmpById(4);
System.out.println(emp1);
sqlSession1.clearCache();
Emp emp2 = mapper1.getEmpById(4);
System.out.println(emp2);
mapper1.insertEmp(new Emp(null,"jack",23,"男","jack@qq.com"));
CacheMapper mapper2 = sqlSession1.getMapper(CacheMapper.class);
Emp emp3 = mapper2.getEmpById(4);
System.out.println(emp3);
SqlSession sqlSession2 = SqlSessionUtils.getSqlSession();
CacheMapper mapper3 = sqlSession2.getMapper(CacheMapper.class);
Emp emp4 = mapper3.getEmpById(4);
System.out.println(emp4);
}
DEBUG 06-14 14:45:16,001 ==> Preparing: select * from t_emp where eid=? (BaseJdbcLogger.java:137)
DEBUG 06-14 14:45:16,021 ==> Parameters: 4(Integer) (BaseJdbcLogger.java:137)
DEBUG 06