MyBatis 批量插入的 3 种方式!还有谁不会?

爱谁谁
发布: 2025-09-24 08:11:19
原创
547人浏览过

springboot环境下,使用sql server数据库和jdk 1.8版本时,我们对比了三种批量插入数据的方式。以下是对这三种方法的详细分析和结论:

结论

对于少量数据的插入,建议使用反复执行单条插入语句的方式,因为这种方法简单易用。对于大量数据的插入,推荐使用批处理执行的方式。在我的测试环境中,插入20条左右的数据时,两种方法的耗时都在百毫秒级别,但批处理方式在处理大量数据时表现更好。无论何时,都不建议使用XML拼接SQL的方式。

三种插入方式的详细对比

1. 反复执行单条插入语句

这种方法的实现非常简单,适合少量数据的插入。使用tk.Mapper插件时,代码量极少,仅需以下几行代码:

@Transactional
public void add1(List<item> itemList) {
    itemList.forEach(itemMapper::insertSelective);
}
登录后复制

优点:

  • 代码量少,易于实现。
  • 适合少量数据的插入。

缺点:

Find JSON Path Online
Find JSON Path Online

Easily find JSON paths within JSON objects using our intuitive Json Path Finder

Find JSON Path Online 193
查看详情 Find JSON Path Online
  • 时间复杂度为O(n),效率较低。

2. XML拼接SQL

这种方法涉及到大段的XML和SQL语句,需要手动拼接SQL语句,容易出错且工作效率低。此外,在插入大量数据时,可能会因为SQL语句过长而报错。

<insert>
    INSERT INTO tb_item VALUES
    <foreach>
        (newId(),#{item.uniqueCode},#{item.projectId},#{item.name},#{item.type},#{item.packageUnique},
        #{item.isPackage},#{item.factoryId},#{item.projectName},#{item.spec},#{item.length},#{item.weight},
        #{item.material},#{item.setupPosition},#{item.areaPosition},#{item.bottomHeight},#{item.topHeight},
        #{item.serialNumber},#{item.createTime}
    </foreach>
</insert>
登录后复制

优点:

  • 在小数据量时,效率尚可。

缺点:

  • 代码复杂,容易出错。
  • 在大量数据插入时容易报错,例如在SQL Server中,插入500条和1000条数据时报错,提示SQL语句过长。
  • 不推荐使用。

3. 批处理执行

批处理执行适合大量数据的插入,效率高且实现相对简单。

@Service
public class ItemService {
    @Autowired
    private ItemMapper itemMapper;
    @Autowired
    private SqlSessionFactory sqlSessionFactory;

    // 批处理
    @Transactional
    public void add(List<item> itemList) {
        SqlSession session = sqlSessionFactory.openSession(ExecutorType.BATCH, false);
        ItemMapper mapper = session.getMapper(ItemMapper.class);
        for (int i = 0; i < itemList.size(); i++) {
            mapper.insertSelective(itemList.get(i));
            if (i % 1000 == 0) {
                session.commit();
            }
        }
        session.commit();
        session.close();
    }
}
登录后复制

优点:

  • 适合大量数据的插入,效率高。
  • 时间复杂度为O(logn),且常数较小。

缺点:

  • 比单条插入复杂,但仍较为简单。

测试结果

在测试中,插入10条和25条数据时,三种方法的耗时都在百毫秒级别,但XML拼接SQL的方式在插入500条和1000条数据时报错,提示SQL语句过长。

总结

  • 少量数据插入(如20条以内):使用反复执行单条插入语句,简单且易于实现。
  • 大量数据插入:使用批处理执行,效率高且稳定。
  • 不推荐使用:XML拼接SQL的方式,因其复杂且容易出错。

通过以上对比和分析,可以根据具体需求选择最适合的插入方式。

MyBatis 批量插入的 3 种方式!还有谁不会?

以上就是MyBatis 批量插入的 3 种方式!还有谁不会?的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号