Mybatis中关于commit的问题

Mybatis中关于commit的问题

老师您好,如下是测试类,其他配置都和视频中的源代码一样,并且在在goods.update的标签中我已经设置flushCache=false.我就是想看看更新操作完以后使用commit能否清除二级缓存。但是我发现与理想不符合,结果图中的缓存命中率居然是0.5,不应该啊,更新完的commit不应该清空二级缓存区了吗,为什么还会出现0.5的缓存命中率(也就是说并没有清空二级缓存区)

恳求老师可以把下端代码复制过去进行测试,万分感谢!

@Test
public void testLv1Cache() throws Exception {
SqlSession session1 = null;
try{
    session1 = MyBatisUtils.openSession();
    Goods goods = session1.selectOne("goods.selectById" , 1603);
    goods.setTitle("更新测试商品82");
    int num = session1.update("goods.update" , goods);
    
    session1.commit();
    
    Goods goods1 = session1.selectOne("goods.selectById" , 1603);
    System.out.println(goods1.getTitle());
    System.out.println("------------------------------------------------");
}catch (Exception e){
    throw e;
}finally {
    MyBatisUtils.closeSession(session1);
}

}

结果图

https://img1.sycdn.imooc.com//climg/634561e6099a943125340965.jpg

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,同学配置时的flushCache="false",表示执行完该sql语句之后,不会清除或刷新缓存。所以即使commit也不会清除缓存的。

同学可以将flushCache设置为"true"再尝试一下。

祝学习愉快~

  • 月是天上月阿 提问者 #1

    老师您好但是一旦用了flushCache=false,那不就是说执行完sql以后立刻清除缓存,那么commit的清空缓存还有什么意义吗

    2022-10-12 12:35:07
  • 同学你好,flushCache的默认值为true,而flushCache="false"的存在的意义正是为了阻止commit的自动清空。

    在某些业务场景下,缓存不应当被写操作清空,此时commit的自动清空就成了负面效果,所以需要使用flushCache="false"来进行阻止。

    祝学习愉快~

    2022-10-12 13:05:40
  • 月是天上月阿 提问者 #3
    老师您好 那么我能不能说 清空二级缓存区只和flushCache有关系。因为flushcsche开启 就会清空 二级缓存区如果不开启 那么二级缓存区就清空不了。
    2022-10-12 13:55:11
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师