本文主要是介绍Mybatis入门(五),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一级缓存
一级缓存是SqlSession级别的,通过同一个SqlSession查询的数据会被缓存,下次查询相同的数据,就
会从缓存中直接获取,不会从数据库重新访问
使一级缓存失效的四种情况:
1) 不同的SqlSession对应不同的一级缓存:创建1个sqlSession进行查询操作,执行2次查询操作,控制台只打印了1次查询语句,第2次查询会从缓存中拿数据
@Test
public void testOneCache(){
SqlSession sqlSession1 = SqlSessionUtils.getSqlSession();
CacheMapper mapper1 = sqlSession1.getMapper(CacheMapper.class);
Emp emp1 = mapper1.getEmpByEid(1);
System.out.println(emp1);
Emp emp2 = mapper1.getEmpByEid(1);
System.out.println(emp2);
}
# 创建2个sqlSession,2次执行同样的查询语句,控制台打印了2次查询语句,说明第2次查询并没有从缓存中拿数据
@Test
public void testOneCache(){
SqlSession sqlSession1 = SqlSessionUtils.getSqlSession();
CacheMapper mapper1 = sqlSession1.getMapper(CacheMapper.class);
Emp emp1 = mapper1.getEmpByEid(1);
System.out.println(emp1);
SqlSession sqlSession2 = SqlSessionUtils.getSqlSession();
CacheMapper mapper2 = sqlSession2.getMapper(CacheMapper.class);
Emp emp2 = mapper2.getEmpByEid(1);
System.out.println(emp2);
}
2) 同一个SqlSession但是查询条件不同:使用同一个SqlSession进行的2次查询操作不一样时,第2次查询并不能从缓存中拿数据
@Test
public void testOneCache(){
SqlSession sqlSession1 = SqlSessionUtils.getSqlSession();
CacheMapper mapper1 = sqlSession1.getMapper(CacheMapper.class);
Emp emp1 = mapper1.getEmpByEid(1);
System.out.println(emp1);
List<Emp> emp2 = mapper2.getAllEmp();
System.out.println(emp2);
}
3) 同一个SqlSession两次查询期间执行了任何一次增删改操作:使用同一个SqlSession进行的2次相同的查询操作,第1次查询执行完后,再执行1次(增删改)操作,这时mybatis会把缓存清空,最后执行相同的查询,就不能从缓存中拿数据了
@Test
public void testOneCache(){
SqlSession sqlSession1 = SqlSessionUtils.getSqlSession();
CacheMapper mapper1 = sqlSession1.getMapper(CacheMapper.class);
Emp emp1 = mapper1.getEmpByEid(1);
System.out.println(emp1);
mapper1.insertEmp(new Emp(null,"abc",23,"男","123@qq.com"));
Emp emp2 = mapper1.getEmpByEid(1);
System.out.println(emp2);
}
4) 同一个SqlSession两次查询期间手动清空了缓存
@Test
public void testOneCache(){
SqlSession sqlSession1 = SqlSessionUtils.getSqlSession();
CacheMapper mapper1 = sqlSession1.getMapper(CacheMapper.class);
Emp emp1 = mapper1.getEmpByEid(1);
System.out.println(emp1);
sqlSession1.clearCache(); // 手动清空缓存
Emp emp2 = mapper1.getEmpByEid(1);
System.out.println(emp2);
}
这篇关于Mybatis入门(五)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!