mybatis之 事务提交,增删改需要事务提交而查不需要 以及提交方法的底层原理

首先我们先从一个结论开始,就是在对数据库进行查操作的时候,我们并没有 进行事务提交也就是执行 sqlSession.commit(); 而在进行增删改操作时,我们需要进行事务的提交,否则数据库是不会发生改变的,而只是控制台显示了,但是实际上数据库并未发生改变

最近在学习MyBatis发现一级缓存中,换成改方法后,数据不一样了

如下代码所示

public void testFindAll() {
        User user = userDao.findById(41);
        System.out.println("第一次查询的用户 "+user);
        //session.clearCache();//此方法也可以清空缓存
        User user2 = userDao.findById(41);
        System.out.println("第二次查询用户: "+user2);
        System.out.println(user == user2);

    }

这个显示缓存没有清除

 

但是在改的方法时遇到了不同,

public void testFindll() {
        //1.根据 id 查询用户
        User user1 = userDao.findById(41);
        System.out.println(user1);
        //2.更新用户信息
        user1.setUsername("update user clear cache");
        user1.setAddress("北京市海淀区");
        userDao.updateUser(user1);
        //3.再次查询 id 为 41 的用户
        User user2 = userDao.findById(41);
        System.out.println(user2);
        System.out.println(user1 == user2);
    }

mybatis之 事务提交,增删改需要事务提交而查不需要 以及提交方法的底层原理_第1张图片

了解发现是
增删改要提交事务异常回滚 不然数据库是不改变的 查的话就不用
这就是Mybatis的一级缓存

如果 sqlSession 去执行 commit 操作(执行插入、更新、删除),清空 SqlSession 中的一级缓存,这样
做的目的为了让缓存中存储的是最新的信息,避免脏读

commit方法的解读

浅谈Mybatis中的事务提交Commit()方法_mybatis提交事务_康世行的博客-CSDN博客

你可能感兴趣的:(java,mybatis,java,mysql)