最近在学习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的一级缓存
如果 sqlSession 去执行 commit 操作(执行插入、更新、删除),清空 SqlSession 中的一级缓存,这样
做的目的为了让缓存中存储的是最新的信息,避免脏读