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

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

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

结论

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

三种插入方式的详细对比

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

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

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

优点:

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

缺点:

会译·对照式翻译
会译·对照式翻译

会译是一款AI智能翻译浏览器插件,支持多语种对照式翻译

会译·对照式翻译0
查看详情 会译·对照式翻译
  • 时间复杂度为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
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

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