此文章发布于71
个月前,部分信息可能已经过时
,请自行斟酌确认。
JdbcTemplate
的 batchUpdate()
方法默认是不在事务中执行的,batchupdate 中的每一条记录都会自动的 commit,如果有异常,则只有异常的数据执行失败,其他数据不会 rollback 回滚,并且后续的数据可以继续执行。
如果需要将 batchUpdate()
执行的所有 sql 放在一个事务中
执行需要用到 TransactionTemplate
,代码如下。
JdbcTemplate 开启事务批量操作
/**
* 执行 Sql 语句并开启事务及回滚
*
* @param sqls 要执行的多条 sql 数组
* @return 影响的行数的数组
*/
private int[] execSqlInTran(final String[] sqls) {
//有返回值
return tranJdbc.execute(status -> {
int[] i;
try {
i = jdbc.batchUpdate(sqls);
} catch (Exception e) {
status.setRollbackOnly(); //回滚
throw new FrameException(e.getCause().getMessage()); //抛出异常
}
return i;
});