接着上一篇讲, mybatis一级缓存在没有使用事务后,本地看不到效果,查询时还是查询了两次数据库。
如下图所示
//开启事务,在同一个方法(同一个回话,一级缓存才有效果) @Transactional public Refund getRefundTest(Long brefundId) { Refund refundTest = refundMapper.getRefundTest(brefundId); System.out.println("1111111111:"+refundTest.getBuyerName()); Refund refundTest0 = refundMapper.getRefundTest(brefundId); System.out.println(refundTest==refundTest0); System.out.println("2222222222:"+refundTest0.getBuyerName()); return refundTest; }
加上事务后效果如下:
一级缓存什么时候会被清除 一级缓存的清除主要有以下两个地方: 1、就是获取缓存之前会先进行判断用户是否配置了flushCache=true属性(参考一级缓存的创建代码截图),如果配置了则会清除一级缓存。 2、MyBatis全局配置属性localCacheScope配置为Statement时,那么完成一次查询就会清除缓存。 3、在执行commit,rollback,update方法时会清空一级缓存。