Mybatis缓存

缓存:将相同查询条件的sql语句执行一遍后所得到的结果存在内存或者某种缓存介质当中,当下次遇到一模一样的查询sql时候不在执行sql与数据库交互,而是直接从缓存中获取结果,减少服务器的压力;
mybatis的查询缓存又分为一级缓存和二级缓存,一级缓存的作用范围为同一个sqlsession,而二级缓存的作用范围为同一个namespace和mapper


一级缓存:
1.Mybatis自带一级缓存默认开启也叫本地缓存
2.Mybatis一级缓存作用域在SqlSession之间
3.当执行查询时Mybatis会去当前SqlSession找,没有就会去数据库
3.当SqlSession关闭缓存销毁,也可clearCache()手动清理,当执行curd后
缓存失效,需重新访问数据库

//按id查,验证一级缓存 
	/*mybatis默认开启一级缓存。第一次查询后放入Sqlsession,范围是同一个session
	第二次相同sql查询从Sqlsession拿。commit后清空。观察日志发现sql只执行了一次*/
		public static void findId2() throws IOException{
			SqlSession session=MybatisUtil.getSession();
			StudentMapper sm=session.getMapper(StudentMapper.class);
			Student student=sm.FindstuNo(3);
			//模仿commit
			//session.commit();
			Student student1=sm.FindstuNo(3);
			System.out.println(student.getStuNo()+","+student.getStuName());
			System.out.println(student1.getStuNo()+","+student1.getStuName());
			session.close();
		}

二级缓存:
1.二级缓存也叫全局缓存,因为一级缓存作用域太低
2.Mybatis自带二级缓存,也可通过第三方缓存插件。需要手动开启
3.基于namespace级别的缓存
4.被缓存的对象需要序列化接口
5.手动开启配置,通过实现Cache接口可以自定义二级缓存
二级缓存工作机制
1.一个会话查询一条数据,该数据会被放入当前会话一级缓存
2.当前会话关闭对应一级缓存消失,该数据就会被放入二级缓存
3不同mapper有自己对应的缓存


在mapper.xml中配置

<!-- 声明开启二级缓存 -->
	<cache
	eviction="FIFO"
	flushlnterval="60000"
	size="512"
	readOnly="true"/>

这里一般只写

<cache"/>

手动设置全局缓存

<!-- 开启二级缓存 -->
		<setting name="cacheEnabled" value="true"/>

demo

/**
		 * 二级缓存
		 * mybatis默认没有开启二级缓存
		 * 准备缓存的对象必须序列化接口
		 * 1:mybatis自带二级缓存
		 * 范围:同一个namespace生成mapper对象
		 * 2第三方提供二级缓存
		 * @throws IOException
		 */
		public static void findId3() throws IOException{
			SqlSession session=MybatisUtil.getSession();
			StudentMapper sm=session.getMapper(StudentMapper.class);
			Student student=sm.FindstuNo(3);
			session.close();//,把一级缓存的放进二级
			//第二次查询
			SqlSession session2=MybatisUtil.getSession();
			StudentMapper sm2=session2.getMapper(StudentMapper.class);
			Student student2=sm2.FindstuNo(3);
			System.out.println(student.getStuNo()+","+student.getStuName());
			System.out.println(student2.getStuNo()+","+student2.getStuName());
			session2.close();
		}

二级缓存流程
查询:从二级缓存拿到数据
存放:暂时放到一级缓存待销毁
销毁:转移到二级缓存

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值