在mybatis进行批量操作的时候,插入多条数据时,设置回滚但是前面几条还是插入,经过尝试
问题所在:
官网api上openSession(false)就可以回滚了,但是用session.getConnection().getAutoCommit()查看还是true
解决方法:
- 将DataSource配置改为AutoCommit(false)
- 将conn设置setAutoCommit(false),用conn进行提交,回滚操作,例子
SqlSession session = sqlSessionFactory.openSession(false);
Connection conn = session.getConnection();
conn.setAutoCommit(false);
try {
UserMapper mapper = session.getMapper(UserMapper.class);
for (String name : names) {
//各种操作
User user = new User();
user.setName(name);
//插入,需要回滚
mapper.insert(user);
}
conn.commit();
} catch (Exception e) {
//有重复回滚
conn.rollback();
throw e;
} finally {
session.close();
}