一级缓存:是session级别的缓存,默认开启,在一个session没有关闭的情况下执行两次相同的查询,第二次查询会从缓存中获取数据。
一级缓存被刷新的情况:在两次相同查询之间插入其他操作(如:增删改),session的缓存会被清空,执行下一次查询会重新执行sql语句。
二级缓存:默认关闭,如果在不同的session范围内,执行相同的数据查询,那么每次查询都是独立地从数据库查询。
二级缓存被刷新的情况:开启了二级缓存的情况下,和一级缓存一样,在两次相同查询之间插入其他操作(如:增删改),二级缓存区会被清空,执行下一次查询会重新执行sql语句。
一级缓存
测试类:
//一级缓存
@Test
public void delectBlogOne() {
SqlSession session = MyBatisUtil.getSqlSession();
BlogMapper blogMapper = session.getMapper(BlogMapper.class);
Blog blog1=blogMapper.selectBlog(38);
System.out.println("查询成功");
Blog blog2=blogMapper.selectBlog(38);
System.out.println("查询成功");
//关闭session
session.close();
System.out.println("session关闭");
}
控制台打印语句:
一级缓存被刷新的情况
测试类:
@Test
public void delectBlogOne1() {
SqlSession session = MyBatisUtil.getSqlSession();
BlogMapper blogMapper = session.getMapper(BlogMapper.class);
Blog blog1=blogMapper.selectBlog(38);
System.out.println("查询成功");
blog1.setFeatured(false);
blogMapper.updateBlog(blog1);
Blog blog2=blogMapper.selectBlog(38);
System.out.println("查询成功");
session.commit();
session.close();
System.out.println("session关闭");
}
控制台打印语句:
二级缓存
开启二级缓存:
一、在xml文件中设置cache
二、实体类中实现序列化接口
测试类:
//二级缓存
@Test
public void delectBlogTwo() {
SqlSession session1 = MyBatisUtil.getSqlSession();
BlogMapper blogMapper1 = session1.getMapper(BlogMapper.class);
Blog blog1=blogMapper1.selectBlog(38);
System.out.println("查询成功");
session1.close();
SqlSession session2 = MyBatisUtil.getSqlSession();
BlogMapper blogMapper2 = session2.getMapper(BlogMapper.class);
Blog blog2=blogMapper2.selectBlog(38);
System.out.println("查询成功");
session2.close();
//System.out.println("session关闭");
}
控制台打印语句:
二级缓存被刷新的情况
测试类:
@Test
public void delectBlogTwo1() {
SqlSession session1 = MyBatisUtil.getSqlSession();
BlogMapper blogMapper1 = session1.getMapper(BlogMapper.class);
Blog blog1=blogMapper1.selectBlog(38);
System.out.println("查询成功");
blog1.setFeatured(true);
blogMapper1.updateBlog(blog1);
session1.commit();
session1.close();
SqlSession session2 = MyBatisUtil.getSqlSession();
BlogMapper blogMapper2 = session2.getMapper(BlogMapper.class);
Blog blog2=blogMapper2.selectBlog(38);
System.out.println("查询成功");
session2.close();
//System.out.println("session关闭");
}
控制台打印语句: