如何使用SimpleJdbcInsert和MapSqlParameterSource批量插入?

时间:2018-03-12 15:40:03

标签: java spring spring-jdbc

以下情况有效,但如何收集多个MapSqlParameterSource并将其全部插入一批?

new SimpleJdbcInsert(ds).withTableName(TABLENAME);

MapSqlParameterSource entry = new MapSqlParameterSource()
    .addValue("id", report.queryId, Types.INTEGER)
    .addValue("firstname", report.reportDate, Types.DATE)
    .addValue("age", report.completionRatio, Types.INTEGER);

insert.execute(entry);

2 个答案:

答案 0 :(得分:1)

幸运的是SimpleJdbcInsert可以获取MapSqlParameterSource的数组(不是列表)。所以有可能如下:

List<MapSqlParameterSource> entries = new ArrayList<>();
entries.add(entry);

MapSqlParameterSource[] array = entries.toArray(new MapSqlParameterSource[entries.size()]);
insert.executeBatch(array);

答案 1 :(得分:0)

使用SqlParameterSourceUtils

有更好的方法
private final List<Map<String, Object>> records = new LinkedList<>();

final SimpleJdbcInsert statement = new SimpleJdbcInsert(dataSource)
        .withTableName("stats")
        .usingGeneratedKeyColumns("id")
        .usingColumns("document", "error", "run", "celex");

      statement.executeBatch(SqlParameterSourceUtils.createBatch(records));