You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

使用SimpleJdbcInsert + MapSqlParameterSource实现批量插入

既然你已经搞定了单条插入,那批量操作其实就是在单条的基础上,把多个参数源收集起来,调用SimpleJdbcInsert的批量执行方法就行,具体步骤如下:

1. 确认你的SimpleJdbcInsert基础配置

首先确保你已经正确初始化了SimpleJdbcInsert,比如指定目标表、要插入的列(可选,但推荐明确指定,避免因表结构变更出问题):

SimpleJdbcInsert jdbcInsert = new SimpleJdbcInsert(jdbcTemplate)
    .withTableName("your_target_table")
    .usingColumns("column_a", "column_b", "column_c");

2. 收集多个MapSqlParameterSource实例

用一个集合(比如ArrayList)来存放所有要插入的参数源。你可以手动逐个创建,也可以通过遍历业务对象列表批量生成:

方式一:手动添加多条记录的参数

List<MapSqlParameterSource> batchParams = new ArrayList<>();

// 第一条记录的参数
MapSqlParameterSource param1 = new MapSqlParameterSource()
    .addValue("column_a", "user_001")
    .addValue("column_b", 28)
    .addValue("column_c", LocalDateTime.now());
batchParams.add(param1);

// 第二条记录的参数
MapSqlParameterSource param2 = new MapSqlParameterSource()
    .addValue("column_a", "user_002")
    .addValue("column_b", 32)
    .addValue("column_c", LocalDateTime.now());
batchParams.add(param2);

// 继续添加更多记录...

方式二:通过业务对象列表批量生成参数

如果你的数据来自业务对象集合,用Stream流处理会更简洁高效:

// 假设你有一个业务实体列表
List<User> userList = getUserListToInsert();

List<MapSqlParameterSource> batchParams = userList.stream()
    .map(user -> new MapSqlParameterSource()
        .addValue("column_a", user.getUsername())
        .addValue("column_b", user.getAge())
        .addValue("column_c", user.getCreateTime()))
    .collect(Collectors.toList());

3. 执行批量插入

调用SimpleJdbcInsert的executeBatch方法,把集合转成SqlParameterSource数组传入即可:

// 执行批量插入,返回每条记录的插入结果计数(通常1表示插入成功)
int[] insertResults = jdbcInsert.executeBatch(batchParams.toArray(new MapSqlParameterSource[0]));

一些实用注意事项

  • 列名一致性:所有MapSqlParameterSource中的键(列名)必须和你usingColumns指定的列,或者表的实际列名完全匹配,否则会抛出SQL语法异常。
  • 结果数组解读:返回的int[]数组中,每个元素对应批量中对应位置记录的插入结果,大多数数据库驱动中,1表示插入成功,0表示未生效。
  • 主键生成限制:如果你的表有自增主键,并且配置了usingGeneratedKeyColumns,要注意executeBatch方法不会返回生成的主键。如果需要获取批量插入的主键,你可能需要改用JdbcTemplate的batchUpdate配合自定义PreparedStatementCreator实现,这属于进阶场景。
  • 批量大小控制:批量插入的性能远优于单条循环插入,但建议控制每次批量的大小(比如1000条以内),避免一次性提交过多数据导致数据库负载过高。

内容的提问来源于stack exchange,提问作者membersound

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 09:13:09