最近在学习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 中的一级缓存,这样
做的目的为了让缓存中存储的是最新的信息,避免脏读