在 Java + MyBatis 中,批量插入数据常见有 三种方式,从简单到高效依次是:
foreach 批量插入(最常用 ✅)int batchInsert(@Param("list") List<User> list);
<insert id="batchInsert">
INSERT INTO user (name, age)
VALUES
<foreach collection="list" item="item" separator=",">
(#{item.name}, #{item.age})
</foreach>
</insert>
List<User> list = new ArrayList<>();
list.add(new User("Tom", 18));
list.add(new User("Jack", 20));
userMapper.batchInsert(list);
✅ 优点:简单、兼容性好
⚠️ 注意:
ExecutorType.BATCH(推荐大数据量 ✅✅)SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false);
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
for (User user : userList) {
mapper.insert(user);
}
sqlSession.commit();
sqlSession.close();
int insert(User user);
<insert id="insert">
INSERT INTO user (name, age)
VALUES (#{name}, #{age})
</insert>
✅ 优点:
⚠️ 注意:
saveBatch(最省事)如果你用的是 MyBatis-Plus:
userService.saveBatch(userList);
或指定批量大小:
userService.saveBatch(userList, 1000);
✅ 底层其实就是 BATCH 模式
| 方式 | 性能 | 使用难度 | 适用场景 |
|---|---|---|---|
| foreach | ⭐⭐ | 简单 | 小批量 |
| BATCH | ⭐⭐⭐⭐ | 中等 | 大批量 ✅ |
| MP saveBatch | ⭐⭐⭐⭐ | 最简单 | 推荐 |
foreachBATCH + 分批max_allowed_packet如果你用的是 MySQL / Oracle / PostgreSQL,或想要 ** Spring 事务版本**,我可以给你更具体的示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。