温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java mybatis如何批量插入数据

发布时间:2026-09-02 18:21:14 来源:亿速云 阅读:90 作者:小樊 栏目:编程语言

Java + MyBatis 中,批量插入数据常见有 三种方式,从简单到高效依次是:


一、使用 foreach 批量插入(最常用 ✅)

1️⃣ Mapper 接口

int batchInsert(@Param("list") List<User> list);

2️⃣ XML 写法

<insert id="batchInsert">
    INSERT INTO user (name, age)
    VALUES
    <foreach collection="list" item="item" separator=",">
        (#{item.name}, #{item.age})
    </foreach>
</insert>

3️⃣ 调用示例

List<User> list = new ArrayList<>();
list.add(new User("Tom", 18));
list.add(new User("Jack", 20));

userMapper.batchInsert(list);

优点:简单、兼容性好
⚠️ 注意

  • MySQL 单条 SQL 有长度限制(可分批)
  • 不适用于超大数据量(几万以上)

二、使用 ExecutorType.BATCH(推荐大数据量 ✅✅)

1️⃣ 代码示例

SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false);
UserMapper mapper = sqlSession.getMapper(UserMapper.class);

for (User user : userList) {
    mapper.insert(user);
}

sqlSession.commit();
sqlSession.close();

2️⃣ Mapper

int insert(User user);
<insert id="insert">
    INSERT INTO user (name, age)
    VALUES (#{name}, #{age})
</insert>

优点

  • 性能最好
  • 真正批量提交

⚠️ 注意

  • 需要手动控制事务
  • 数据量太大时要分批 commit

三、MyBatis-Plus 的 saveBatch(最省事)

如果你用的是 MyBatis-Plus

userService.saveBatch(userList);

或指定批量大小:

userService.saveBatch(userList, 1000);

✅ 底层其实就是 BATCH 模式


四、方式对比总结

方式 性能 使用难度 适用场景
foreach ⭐⭐ 简单 小批量
BATCH ⭐⭐⭐⭐ 中等 大批量 ✅
MP saveBatch ⭐⭐⭐⭐ 最简单 推荐

五、实用建议

  • 几千条以内foreach
  • 几万~几十万BATCH + 分批
  • MySQL:注意 max_allowed_packet

如果你用的是 MySQL / Oracle / PostgreSQL,或想要 ** Spring 事务版本**,我可以给你更具体的示例。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI