Mybatis批量插入方式比较

Mybatis代码自动生成工具,生成批量插入和批量更新方法 mybatis-generator-gui-plus 生成批量插入和更新方法一直用IDEA中的「MyBatisCodeHelperPro」这个插件生成批量插入和更新方法,后面改成订阅收费,使用也不是特别频繁。本想找找其他生成批量插入更新的工具,找了一圈,也没发现都不满足,索性自己基于「mybatis-generator-core」写一套代码生成工具来生成批量插入和更新方法。图形界面完全基于「mybatis generator-gui」,这个工具非常不错,就是没有批量插入和更新方法,在「mybatis-gen 阅读详情

效率:普通for循环 < BATCH方式获取mapper < foreach标签拼接sql

主函数代码:

package com.william;

import com.william.mapper.Student;
import com.william.mapper.StudentExample;
import com.william.mapper.StudentMapper;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.ExecutorType;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.exception.InvalidConfigurationException;
import org.mybatis.generator.exception.XMLParserException;
import org.mybatis.generator.internal.DefaultShellCallback;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

@Slf4j
@Data
public class Main {

    static public void main(String[] args) throws IOException, XMLParserException, InvalidConfigurationException, SQLException, InterruptedException {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        System.out.println(inputStream.toString());
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession session = sqlSessionFactory.openSession(true);
        StudentMapper mapper = session.getMapper(StudentMapper.class);
        long start, end;
        start = System.currentTimeMillis();
        Student student=null;
        int k=4000;
        for (int i=0; i<500; i++){
            student = new Student();
            student.setId(k+i);
            student.setName("Test Name");
            student.setAge(99);
            student.setPassword("1231245");
            student.setSalary(50000);
            student.setAddress("Peking");
            mapper.insert(student);
        }
        k+=500;
        System.out.printf("普通for循环耗时: %d\n", System.currentTimeMillis()-start);
        session = sqlSessionFactory.openSession(ExecutorType.BATCH, true);
        mapper = session.getMapper(StudentMapper.class);

        start = System.currentTimeMillis();
        for (int i=0; i<500; i++){
            student = new Student();
            student.setName("Test Name");
            student.setAge(99);
            student.setPassword("1231245");
            student.setSalary(50000);
            student.setAddress("Peking");
            student.setId(k+i);
            mapper.insert(student);

        }
        k+=500;
        System.out.printf("Batch for循环耗时: %d\n", System.currentTimeMillis()-start);
        List<Student> list = new ArrayList<Student>(500);
        start = System.currentTimeMillis();
        for (int i=0; i<500; i++){
            student = new Student();
            student.setName("Test Name");
            student.setAge(99);
            student.setPassword("1231245");
            student.setSalary(50000);
            student.setAddress("Peking");
            list.add(i, student);
        }
        mapper.insertAllStudents(list);
        System.out.printf("Each标签 for循环耗时: %d\n", System.currentTimeMillis()-start);
    }
}

mapper.xml文件

<insert id="insertAllStudents" parameterType="Student">
        insert into students values
        <foreach collection="list" separator="," item="item">
          (item.id, item.password, item.age, item.salary, item.address, item.name)
        </foreach>
  </insert>

结果为:

普通for循环耗时: 1340
Batch for循环耗时: 30
Each标签 for循环耗时: 10

可见,forEach标签的效率是最高的

 

MyBatis 三种批量插入方式的比较,我推荐第3个 数据库使用的是SQLServer,JDK版本1.8,运行在SpringBoot环境下 对比3种可用的方式 反复执行单条插入语句 xml拼接sql 批处理执行 先说结论:少量插入请使用反复插入单条数据,方便。数量较多请使用批处理方式。(可以考虑以有需求的插入数据量20条左右为界吧,在我的测试和数据库环境下耗时都是百毫秒级的,方便最重要)无论何时都不用xml拼接sql的方式。 拼接SQL的xml newId()是sqlserver生成UUID的函数,与本文内容无关 <insert id="insert 阅读详情

相关推荐

MCP4728 电路及stm32F103程序移植

写在前面 通过优快云查到一些MCP4728 的程序,结合程序及datasheet对于驱动的描述,理清了思路 感谢开路者! MCP4728的电路比较简单,见下文描述 应用电路 datasheet: 实际测试电路: SCL接stm32的PB10,SDA接PB11 RDY/BSY引脚和LDCA引脚,悬空 解释见截图: MCP4728地址 选择任意输出通道写入DAC输入寄存器 应用程序 int mcp4728_write_all_channel(float vol1, float vol2, fl

u013074298的专栏 5422

mybatis-generator插件使用 批量插入、更新

1、 &lt;dependency&gt; &lt;groupId&gt;org.mybatis.generator&lt;/groupId&gt; &lt;artifactId&gt;mybatis-generator-core&lt;/artifactId&gt; &lt;version&gt;1.3.2&lt;/version&gt; &lt;/depen

孟凡霄 1万+

VMware ubuntu虚拟机(或Centos7)与主机共享文件夹

系统环境 Windows 10 Vmware Workstation 15 Pro Ubuntu 20.04.1 LTS centos7 1.Ubuntu配置共享文件 1.1安装VMware-tools 更新最新VMware-tools组件 编辑->首选项->更新->立即下载所有组件 安装VMware-tools 虚拟机->安装VMware-tools 安装后ubuntu会加载一个虚拟光驱,解压文件,在解压的文件目录下执行以下命令进行安装 sudo vmware-instal

weixin_38924500的博客 2159

使用Mybatis批量插入大量数据的实践

在项目开发过程中,我们经常会有批量插入的需求,例如:定时统计任务但是受限于MySQL中参数限制,5.7版本默认值为4M,这显然不太符合我们的需求,当然我们也可以通过修改此值来适应我们业务,今天分享在不修改此值的情况下,如何在客户端优雅的处理此场景现在整个世界都变优雅了!

做从未做的事,叫成长;做不愿做的事,叫改变;做不敢做的事,叫突破。 7634

CGNS快速入门到实战(二):VS配置调用CGNS静态链接库

CGNS快速入门到实战这一系列分成三篇文章展开叙述,具体有:(一)CGNS静态链接库编译;(二)VS配置调用CGNS静态链接库;(三)CGNS文件及案例展示。本篇文章重点讲述VS配置调用CGNS静态链接库。

ahang_99的博客 2616

数据分析——员工离职预测

员工离职预测一. 题目描述二. 数据说明三. 步骤实现1.导入并查看2.数据探索性分析3.数据处理4.模型分析5.结果分析(1) 可视化的结果分析(2)特征选择结果分析(3)多模型交叉验证结果分析 一. 题目描述 员工是否准备离职是困扰用人单位的问题,其关系到单位业务的开展及新人员的招聘,及时的分析出有离职倾向的员工成为关键的因素。数据主要包括影响员工离职的各种因素(工资、出差、工作环境满意度、工作投入度、是否加班、是否升职、工资提升比例等)以及员工是否已经离职的对应记录。 二. 数据说明 数据分为训练数据

weixin_43925467的博客 1万+

mybatis 逆向工程 批量插入插件

代码示例 Wiki - Gitee.com

CTLLIN的专栏 1718

YOLO26全网首发:CVPR2026 FAA| 解决YOLO Neck跨尺度方向冲突--- FAAFusion频域对齐融合模块 | 暴力涨点篇

本文改进:FAAFusion引入YOLO neck ,代替nn.Upsample和Concat

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 638

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

用mybatis有两种批量插入数据的方式可选:1. 拼接批量插入多条数据的SQL. 2. 使用Batch Insert技术。

Neo.Yang的专栏 5万+

有趣的方式学习DDR5(4)—— DDR5 SDRAM 启动与初始化过程全攻略

🟢。

weixin_43199439的博客 1623

RPA与旅游与酒店行业自动化实战案例

1. 背景介绍 1.1 旅游与酒店行业的挑战 旅游与酒店行业是一个高度竞争的市场,企业需要不断提高服务质量、降低成本、提高效率以保持竞争力。在这个过程中,企业面临着诸多挑战,如客户需求多样化、市场变化快速、人力资源成本高昂等。为了应对这些挑战,企业需要寻求新的技术手段来提高运营效率。

AI天才研究院 615

Mybatis三种常见的批量插入方式比较

mybaits有三种常见的批量插入方式: 反复执行单条插入语句 xml拼接sql 批处理执行 第一种,相当于循环里面反复执行同一条sql语句,当插入的数据量小的时候没啥问题,但是数量超过上千条的时候就效率非常的低。 第二种,不推荐,因为当数量少的时候批量插入没问题,但是当数据量超过500条,或者更多的是时候就直接报错!使用时有大段的xml和sql语句要写,很容易出错,工作效率很低。更关键点是,虽然效率尚可,但是真正需要效率的时候你挂了,要你何用? 第三种,推荐。当批量插入.

不受天磨非好汉,不遭人妒是庸才——着实着迷゛ 697

芯片ATE测试PAT(Part Average Testing)学习总结-20250916

文章摘要:零件平均测试(PAT)是半导体制造中基于统计学的质量控制方法,分为静态和动态两种类型。静态PAT通过预先设定的固定限值(每6-8批次更新)筛选异常芯片,计算采用稳健平均值和四分位间距。动态PAT则根据实时数据调整限值,能更精确识别异常而不误判合格芯片。两种方法均采用"均值±6倍标准差"的计算公式,但动态PAT具有更好的适应性和准确性。该方法通过统计分析提高了芯片产品的质量和可靠性。

歌颂苦难的行为是无耻的; 1190

MyBatis 三种批量插入方式的比较

数据库使用的是SQLServer,JDK版本1.8,运行在SpringBoot环境下 对比3种可用的方式反复执行单条插入语句xml拼接sql批处理执行先说结论:少量插入请使用反复插入单条数...

公众号:Java后端 296

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Mybatis的三种批量插入方式耗时比较

Mybatis的三种批量插入方式

qq_42615006的博客 916

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

MyBatis三种批量插入方式的比较,我推荐第3个

数据库使用的是SQLServer,JDK版本1.8,运行在SpringBoot环境下 对比3种可用的方式 反复执行单条插入语句 xml拼接sql 批处理执行 先说结论:少量插入请使用反复插入单条数据,方便。数量较多请使用批处理方式。(可以考虑以有需求的插入数据量20条左右为界吧,在我的测试和数据库环境下耗时都是百毫秒级的,方便最重要)。 无论何时都不用xml拼接sql的方式。 代码 拼接SQL的xml newId()是sqlserver生成UUID的函数,与本文内容无关 <insert id="i

kangbin825的专栏 416

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

MyBatis 三种批量插入方式的比较,我推荐第3个!

本文转载自:https://mp.weixin.qq.com/s/K-wCUUztBxjGSlv2M5UA1Q 本文主要用来记录三种批量插入方式的比较,方便后续工作中根据实际情况来选择 数据库使用的是SQLServer,JDK版本1.8,运行在SpringBoot环境下 对比3种可用的方式 反复执行单条插入语句 xml拼接sql 批处理执行 先说结论:少量插入请使用反复插入单条数据,方便。数量较多请使用批处理方式。(可以考虑以有需求的插入数据量20条左右为界吧,在我的测试和

chali1314的博客 413

MyBatis三种批量插入方式的比较,我推荐第3个!

原文:jianshu.com/p/cce617be9f9e数据库使用的是SQLServer,JDK版本1.8,运行在SpringBoot环境下 对比3种可用的方式反复执行单条插入语句xml...

架构文摘 136

mybatis三种批量插入方式的比较,不要在foreach拼接了

mybatis三种批量插入方式的比较,不要在foreach拼接了

Jaemon 1227

MyBatis 三种批量插入方式的比较,推荐第3个。

数据库使用的是SQLServer,JDK版本1.8,运行在SpringBoot环境下 对比3种可用的方式 反复执行单条插入语句 xml拼接sql 批处理执行 先说结论:少量插入请使用反复插入单条数据,方便。数量较多请使用批处理方式。(可以考虑以有需求的插入数据量20条左右为界吧,在我的测试和数据库环境下耗时都是百毫秒级的,方便最重要) 无论何时都不用xml拼接sql的方式。 代码 拼接SQL的xml newId()是sqlserver生成UUID的函数,与本文内容无关

qfguan的博客 210
上一篇: 使用MybatisGenerator
下一篇: Mybatis联合查询
WilliamCode
博客等级 码龄11年 118粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值