Mybatis 批量插入数据的三种方式

Mybatis 批量插入数据的三种方式1 for 循环 insertlongst System currentTimeM for inti 0 i lt i Useruser newUser user setId id i user setName name i user setPassword password i userMapper in

1.for循环insert

 long start = System.currentTimeMillis(); for(int i = 0 ;i < ; i++) { 
    User user = new User(); user.setId("id" + i); user.setName("name" + i); user.setPassword("password" + i); userMapper.insert(user); } long end = System.currentTimeMillis(); System.out.println("---------------" + (start - end) + "---------------"); 
 <insert id="insert"> INSERT INTO t_user (id, name, password) VALUES(#{id}, #{name}, #{password})  
     insert> 

时间为ms

2.Mybatis batch模式

 SqlSession sqlSession = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH, false);//跟上述sql区别 UserMapper userMapper = sqlSession.getMapper(UserMapper.class); long start = System.currentTimeMillis(); for (int i = 0; i < ; i++) { 
    User user = new User(); user.setId("id" + i); user.setName("name" + i); user.setPassword("password" + i); userMapper.insert(user); } sqlSession.commit(); long end = System.currentTimeMillis(); System.out.println("---------------" + (start - end) + "---------------"); 
 <insert id="insert"> INSERT INTO t_user (id, name, password) VALUES(#{id}, #{name}, #{password})  
     insert> 

时间为ms

3.批量foreach插入

 long start = System.currentTimeMillis(); List<User> userList = new ArrayList<>(); for (int i = 0; i < ; i++) { 
    User user = new User(); user.setId("id" + i); user.setName("name" + i); user.setPassword("password" + i); userList .add(user); } userMapper.insertBatch(userList); long end = System.currentTimeMillis(); System.out.println("---------------" + (start - end) + "---------------"); 
<insert id="insertBatch" parameterType="java.util.List"> INSERT INTO t_user (id, name, password) VALUES <foreach collection ="userList" item="user" separator =","> (#{user.id}, #{user.name}, #{user.password})  
     foreach >  
      insert> 

时间为8706ms

插入三种方式,文章参考:https://segmentfault.com/a/90975?utm_source=tag-newest

如果批量增加数据量较多时 建议采用batch模式,foreach一次性插入数据量建议10-100条,for循环是最不建议的方式,需要频繁的建立关闭数据库连接,比较耗时。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/199979.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月20日 上午11:47
下一篇 2026年3月20日 上午11:47


相关推荐

  • visual studio code适合什么语言_将当前运行的配置备份成初始配置

    visual studio code适合什么语言_将当前运行的配置备份成初始配置VSCode是一款非常好用的编辑器(或者IDE),具有很好的可扩展性,功能比较强大,占用的系统资源也适中,启动速度较快,而且支持全平台,比较适合作为Python开发用的IDE。本文针对Linux(主要是Ubuntu,其他发行版类似),整合一些Python开发相关的配置,仅供刚入坑Linuxer参考。一、VSCode与其他编辑器(或IDE)的比较(1)VSCode与Atom的比较:Atom是一款由g…

    2022年8月25日
    9
  • C语言——折半查找法

    C语言——折半查找法C 语言 折半查找法折半查找法 顾名思义就是一种查找的方法 优点是其比较次数少 查找速度快 平均性能好 缺点是其要求的待查表必须是有序表 且插入删除比较困难 因此 折半查找法适用于不经常变动并且查找次数比较频繁的有序列表 例如 我买了一件衣服 告诉你在 300 元以内 让你用次数最少猜出这件衣服的价格 答 每次猜中间数代码展示 用最少次数猜 10 个数字中有没有 7intmain intarr 1 2 3 4 5 6 7 8 9 10 要求数组必须是有序的 intl

    2026年3月16日
    2
  • 【愚公系列】2022年02月 Django商城项目 34-订单支付功能实现(支付宝)[通俗易懂]

    【愚公系列】2022年02月 Django商城项目 34-订单支付功能实现(支付宝)[通俗易懂]文章目录前言一、回调逻辑处理1.安装SDK2.生成私钥公钥3.setting中支付宝配置信息4.生成支付URL5.接收支付成功信息前言具体支付宝支付流程可参考这篇文章:https://www.cnblogs.com/xiaolu915/p/10528155.html一、回调逻辑处理1.安装SDKpipinstallpython-alipay-sdk–upgrade2.生成私钥公钥opensslOpenSSL>genrsa-outapp_private_key.pem

    2022年6月1日
    40
  • phpstorm最新激活码【中文破解版】「建议收藏」

    (phpstorm最新激活码)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月26日
    66
  • Cursor 1.0:四大核心功能详解,以及国内使用教程

    Cursor 1.0:四大核心功能详解,以及国内使用教程

    2026年3月16日
    2
  • oracle函数listagg的使用说明

    oracle函数listagg的使用说明oracle 函数 listagg 的使用说明

    2026年3月18日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号