温馨提示×

温馨提示×

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

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

java mybatis如何批量插入

发布时间:2026-09-23 05:51:29 来源:亿速云 阅读:86 作者:小樊 栏目:编程语言

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


一、使用 foreach 拼接 SQL(最常用)

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>

✅ 优点:简单、兼容性好
⚠️ 注意:一次插入条数不宜过多(如 500~1000 条)


二、分批次插入(推荐)

避免 SQL 过长:

int batchSize = 500;
for (int i = 0; i < list.size(); i += batchSize) {
    List<User> subList = list.subList(i, Math.min(i + batchSize, list.size()));
    userMapper.batchInsert(subList);
}

三、使用 ExecutorType.BATCH(性能最好)

1️⃣ 手动控制 SqlSession

@Autowired
private SqlSessionTemplate sqlSessionTemplate;

public void batchInsert(List<User> list) {
    SqlSession session = sqlSessionTemplate
        .getSqlSessionFactory()
        .openSession(ExecutorType.BATCH, false);

    UserMapper mapper = session.getMapper(UserMapper.class);

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

    session.flushStatements();
    session.commit();
    session.close();
}

2️⃣ Mapper

int insert(User user);

✅ 优点:真正批量、性能极高
⚠️ 注意:事务需手动管理


四、Spring + MyBatis(推荐写法)

@Transactional
public void batchInsert(List<User> list) {
    for (User user : list) {
        userMapper.insert(user);
    }
}

配合:

mybatis:
  executor-type: batch

五、MySQL 特殊优化(rewriteBatchedStatements)

jdbc:mysql://localhost:3306/test?rewriteBatchedStatements=true

✅ 可显著提升批量插入性能


总结建议

场景 推荐方式
小批量 foreach
中批量 分片 + foreach
大批量 BATCH Executor
超高并发 BATCH + rewriteBatchedStatements

如果你用的是 MySQL / Oracle / PostgreSQL,或者 Spring Boot,可以告诉我,我可以给你更具体的示例。

向AI问一下细节

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

AI