mybatis一级缓存

接着上一篇讲,
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方法时会清空一级缓存。

 

posted @ 2022-01-18 15:57  余生请多指教ANT  阅读(76)  评论(0编辑  收藏  举报