美文网首页
DbUtils实现事务的方法

DbUtils实现事务的方法

作者: TinyThing | 来源:发表于2021-06-25 17:45 被阅读0次

    代码很简单,需要注意一个地方:

    事务提交或者回滚无需手动setAutoCommit(true)

    因为数据库连接池的connection是一个包装类,他的close方法中会还原connection为初始状态。

            Connection conn = null;
            QueryRunner runner = new QueryRunner();
            //获取数据库连接
            try {
                conn = getConnection(wrapper.getDataSource(), wrapper.getTest());
                //开启事务
                if (needTransaction) {
                    conn.setAutoCommit(false);
                }
    
                //将每条sql的返回值保存在input中: $1 $2 $3以此类推,用于之后的sql使用
                for (int i = 0; i < sqlList.size(); i++) {
                    String sql = sqlList.get(i);
                    SqlAndParams sqlAndParams = DynamicSqlParser.parseSql(sql, input);
                    output = executeSql(conn, runner, sqlAndParams);
                    input.put("$" + (i + 1), output);
                }
    
                //提交事务
                if (needTransaction) {
                    commitAndCloseQuietly(conn);
                }
                return output;
            } catch (Exception e) {
                //回滚
                if (needTransaction) {
                    rollbackAndCloseQuietly(conn);
                }
                throw new BaseException(e, INTERNAL_ERROR_CODE, SQL_ERROR + e.getCause());
            } finally {
                closeQuietly(conn);
            }
    
    

    相关文章

      网友评论

          本文标题:DbUtils实现事务的方法

          本文链接:https://www.haomeiwen.com/subject/ylpoyltx.html