起因
我先写了一个方法
void updateUser(User user);
然后写配置文件
<select id="updateUser" parameterType="user">
update user set username = #{username},address=#{address}
where id = #{id}
</select>
这里犯了一个错误 因为我们要执行更新操作 却写了查询的标签
发现
当我们在测试类中执行这个代码的时候
即使我们关闭了自动提交,也没有手动commit操作
private InputStream is;
private SqlSession sqlSession;
private UserDao userDao;
is = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(is);
sqlSession = factory.openSession(false);
userDao = sqlSession.getMapper(UserDao.class);
User user1 = userDao.findUserByID(41);
System.out.println(user1);
user1.setUsername("芜~起飞飞飞飞");
user1.setAddress("格陵兰岛");
userDao.updateUser(user1);
但是仍然会对数据库进行操作 并不会回滚
原因
因为在Mybatis中 只有调用sqlSession的增删改 才需要手动提交(默认是关闭自动提交的)
而查询操作是不需要commit的
推测
通过这次失误 我推测
Mybatis不会检查你的sql语句到底是查询 还是增删改
它只会根据你写的标签来决定它采取的行动