mybatis一级缓存、二级缓存以及缓存被刷新的情况

一级缓存:是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关闭");

	}

控制台打印语句:
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值