0
点赞
收藏
分享

微信扫一扫

MyBatis一级缓存中增删改要提交事务,查的话就不用


最近在学习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);

}

这个显示缓存没有清除

MyBatis一级缓存中增删改要提交事务,查的话就不用_一级缓存


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

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一级缓存中增删改要提交事务,查的话就不用_缓存_02


查了发现是

增删改要提交事务异常回滚 不然数据库是不改变的 查的话就不用

这就是Mybatis的一级缓存

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


举报

相关推荐

0 条评论