JdbcTemplate 通过 batchUpdate 批量执行 sql 语句并实现事务及回滚

JdbcTemplatebatchUpdate() 方法默认是不在事务中执行的,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;
});
最后修改:2019 年 05 月 03 日 08 : 14 PM
如果觉得我的文章对你有用,请随意赞赏

发表评论