全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-20 8 分钟 ✍️ juanwangdev

批量插入数据

批量插入可显著提升大量数据写入效率。

foreach 批量插入

XML
<insert id="batchInsert" parameterType="java.util.List">
    INSERT INTO user (username, email, create_time) VALUES
    <foreach collection="list" item="user" separator=",">
        (#{user.username}, #{user.email}, #{user.createTime})
    </foreach>
</insert>
Java
List<User> users = Arrays.asList(
    new User("user1", "user1@example.com"),
    new User("user2", "user2@example.com"),
    new User("user3", "user3@example.com")
);
int rows = mapper.batchInsert(users);
System.out.println("插入 " + rows + " 条记录");

生成的 SQL:

SQL
INSERT INTO user (username, email, create_time) VALUES 
('user1', 'user1@example.com', NOW()),
('user2', 'user2@example.com', NOW()),
('user3', 'user3@example.com', NOW())

分批插入

当数据量较大时,需分批插入避免 SQL 过长:

Java
public void batchInsertInChunks(List<User> users) {
    int batchSize = 500;  // 每批 500 条
    for (int i = 0; i < users.size(); i += batchSize) {
        List<User> chunk = users.subList(i, Math.min(i + batchSize, users.size()));
        mapper.batchInsert(chunk);
    }
}

注意:MySQL 单次插入建议不超过 1000 条,避免内存溢出与 SQL 语句过长。

批量插入获取主键

XML
<insert id="batchInsert" useGeneratedKeys="true" keyProperty="id">
    INSERT INTO user (username, email) VALUES
    <foreach collection="list" item="user" separator=",">
        (#{user.username}, #{user.email})
    </foreach>
</insert>
Java
mapper.batchInsert(users);
// 插入后,每个 user 对象的 id 字段自动填充
for (User user : users) {
    System.out.println("生成的 ID: " + user.getId());
}

要点总结

  • foreach 标签实现批量插入,生成单条多值 INSERT 语句
  • 分批插入控制批量大小,建议 500-1000 条每批
  • useGeneratedKeys 可在批量插入后获取自增主键
  • 批量插入需在事务中执行,保证数据一致性

📝 发现内容有误?点击此处直接编辑

← 上一篇 单表查询操作
下一篇 → 条件更新与删除
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库