MyBatis 批量插入数据实现(MySQL)

java 基于DOM 环境下的 xml 文件的单条信息写入 java 基于DOM 库下的 xml 文件的单条信息写入。 Java 在 javax & javafx 以及 org.3wc 环境下写入xml 数据与末尾。经过多方搜索搬运与尝试,总算搞清输出流里的一个清流。 提示:以下是本篇文章正文内容,下面案例可供参考 一、写入,在XML文件末尾写入新数据。 一下代码是我在参考优快云与codota搜索的文章得到的关键字。 二、使用步骤 1.引入库 代码如下(示例): import javax.xml.transform.*; import javax.xm 阅读详情

假如需要搬一万块砖到楼顶,有一部电梯,电梯一次可以放适量的砖(最多放 500)。可以选择一次运送一块砖,也可以一次运送 500 块砖,哪个时间消耗大?

一、sql 层面实现数据插入

  1. 单条插入数据的写法:
insert into table ([列名],[列名])  values ([列值],[列值]));
或:
insert into table values ([列值],[列值]));
  1. 批量插入
    一种可以在代码中循环执行上面的语句,但是这种效率太差。另一种,可以用MySQL支持的批量插入语句,这种方式更高效。
insert into table  ([列名],[列名]) 
 VALUES
([列值],[列值]),
([列值],[列值]),
([列值],[列值]);

批量的好处:可以避免程序和数据库建立多次连接,增加服务器负荷。

二、MyBatis 层面批量插入数据到数据库

两种方式:xml 文件和注解。使用批量插入执行的 sql 语句应该等价于:

 insert into table (id, name,sex,address)
 values
 (?,?,?,?),(?,?,?,?),(?,?,?,?),(?,?,?,?)

1️⃣xml 配置

最基础的是用 mapping.xml 配置的方式,包括以下两种具体方式:

  1. mapping.xml 中 insert 语句可以写成单条插入,在调用方循环 1000 次
<!-- 在外部for循环调用1000次 -->
<insert id="insert" parameterType="com.xxp.mybatis.Person">
    insert into person (id, name,sex,address)
    values 
    (#{id,jdbcType=INTEGER},#{name,jdbcType=VARCHAR},
    #{sex,jdbcType=VARCHAR},#{address,jdbcType=VARCHAR})
</insert>
  1. mapping.xml 中 insert 语句写成一次性插入一个 1000 的 list
<insert id="insertBatch" >
    insert into person ( <include refid="Base_Column_List" /> ) 
    values 
    <foreach collection="list" item="item" index="index" separator=",">
        (null,#{item.name},#{item.sex},#{item.address})
    </foreach>
</insert>

参数解释:
foreach 的主要作用在构建 in 条件中,它可以在 sql 语句中进行迭代一个集合。foreach 元素的属性主要有 collection,item,separator,index,open,close。

  1. collection:指定要遍历的集合。表示传入过来的参数的数据类型。该属性是必须指定的,要做 foreach 的对象。在使用 foreach 的时候最关键的也是最容易出错的就是 collection 属性。在不同情况 下,该属性的值是不一样的,主要有一下 3 种情况:
    a. 如果传入的是单参数且参数类型是一个 List 的时候,collection 属性值为 list。
    b. 如果传入的是单参数且参数类型是一个数组的时候,collection 的属性值为 array。
    c. 如果传入的参数是多个的时候,就需要把它们封装成 Map,当然单参数也可以封装成 Map。Map 对象没有默认的键。

  2. item:表示集合中每一个元素进行迭代时的别名。将当前遍历出的元素赋值给指定的变量,然后用#{变量名},就能取出变量的值,也就是当前遍历出的元素。

  3. separator:表示在每次进行迭代之间以什么符号作为分隔符。select * from tab where id in(1,2,3)相当于1,2,3之间的","

  4. index:索引。index 指定一个名字,用于表示在迭代过程中,每次迭代到的位置。遍历 list 的时候 index 就是索引,遍历 map 的时候 index 表示的就是 map 的 key,item 就是 map 的值。

  5. open/close:表示该语句以什么开始/结束。

mapper 接口中的使用:

public interface TabMapper {
    public List<Tab> getTabsByConditionLike(@Param("list")List<Integer> ids);
}

2️⃣注解

MyBatis 提供用于插入数据的注解有两个:@insert,@InsertProvider。类似还有:@DeleteProvider、@UpdateProvider和@SelectProvider。
作用:
用来在实体类的 Mapper 类里注解保存方法的 sql 语句。
区别:
@Insert 是直接配置 sql 语句,而 @InsertProvider 则是通过 sql 工厂类及对应的方法生产 sql 语句,这种方法的好处在于,可以根据不同的需求生产出不同的 sql,适用性更好。
使用:

@Insert("insert into blog(blogId,title,author) values(#blogId,#title,#author)")
public boolean saveBlog(Blog blog);
@InsertProvider
在 mapper 接口中的方法上使用 @InsertProvider 注解:

参数解释:
type 为工厂类的类对象,
method 为对应的工厂类中的方法,方法中的 @Param(“list”) 是因为批量插入传入的是一个 list,但是 Mybatis 会将其包装成一个 map。其中 map 的 key 为“list”,value为传入的 list。

三、xml/注解两种方式的区别

1️⃣foreach 相当语句逐条 insert 语句执行,将出现如下问题:

  1. mapper 接口的 insert 方法返回值将是最后一条 insert 语句的操作成功的记录数目(就是0或1),而不是所有 insert 语句的操作成功的总记录数目;
  2. 当其中一条不成功时,不会进行整体回滚。

2️⃣注解方式:当有一条插入不成功时,会整体回滚。

MySQL批量插入(使用mybatis实现mysql数据库的批量插入操作) MySQL批量插入操作相较于单次循环插入有较大的优势,在特定场景下,有比较重要的应用价值。这里对mybatis批量插入进行一个小的总结,本质上是将很多条待插入的数据拼接为一条SQL语句,再执行插入操作,在Excel导入等场景下是很有用的。先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。... 阅读详情

相关推荐

使用MySQL进行批量插入数据

在上面的示例中,我们可以看到INSERT INTO语句后面的值列表包含了多个值组,每个值组对应一个要插入的数据记录。批量插入数据是在MySQL数据库中一次性插入多条数据记录的操作,这样可以提高插入数据的效率。在本文中,我将介绍如何使用MySQL进行批量插入数据,并提供相应的示例代码。为了实现批量插入,我们可以使用INSERT INTO语句的多个值列表。通过批量插入,我们可以一次性插入多条数据记录,提高插入数据的效率。接下来,我将提供一个使用Python和MySQL连接的示例代码,演示如何使用批量插入数据。

ZaxfSass的博客 1320

MyBatis批量插入数据实现(MySQL)

一、SQL层面实现数据插入 先复习一下单条/批量插入数据的sql语句怎么写: 单条插入数据的写法: insert into table ([列名],[列名]) values ([列值],[列值])); 或: insert into table values ([列值],[列值])); 批量插入 一种可以在代码中循环着执行上面的语句,但是这种效率太差。 另一种,可以用mysql支持的批量插入语句,这种方式相比起来,更高效。 insert into table ([列名],[列名]) VAL

诚的博客 1万+

面试题:MyBatis批量插入的五种方式,哪种最强?

列举了MyBatis和MyBatis-Plus常用的五种批量插入的方式,进行了详细的总结归纳@Override// 注意:此SQL注入器继承了DefaultSqlInjector(默认注入器),调用了DefaultSqlInjector的getMethodList方法,保留了mybatis-plus的自带方法@Bean以上就是我对目前MyBatis常用的批量插入方法的总结。

xuxu96 1002

Mybatis 传入数组参数

mybatis @Param

DogCoder的博客 1万+

MyBatis批量插入数据实现(MySQL)

假如需要搬一万块砖到楼顶,有一部电梯,电梯一次可以放适量的砖(最多放 500)。可以选择一次运送一块砖,也可以一次运送 500 块砖,哪个时间消耗大? 一、sql 层面实现数据插入 单条插入数据的写法: insert into table ([列名],[列名]) values ([列值],[列值])); 或: insert into table values ([列值],[列值])); 批量插入 一种可以在代码中循环执行上面的语句,但是这种效率太差。另一种,可以用MySQL支持的批量插入语..

【优快云】 4326

自动化学报latex模板——ctex2.4.6和ctex2.9.2直接使用步骤

自动化学报latex模板——ctex2.4.6和ctex2.9.2直接使用步骤 1.背景及问题 最近在使用自动化学报latex模板写作业时,一只对latex搞不清楚,网上关于各种版本的latex下载了一堆(比如ctex中文套装方案的各个版本及texlive+texstudio方案,中间还升级了miktex,windet等),发现都未能成功编译出来自动化学报的latex模板,反正开始头很大!!!最后终于没忍住打开了: 自动化学报官网下载模板链接,因为我就要用latex模板(不能服输!)找到的解决方案是:使用

QIANFANGshiwo的博客 7708

MyBatis批量插入数据实现(Mysql)

MyBatis批量插入数据实现(Mysql) 文章目录MyBatis批量插入数据实现(Mysql)SQL语句单条数据插入批量插入xml文件单条插入批量插入参数说明 SQL语句 单条数据插入 insert into table ([列名],[列名]) values ([列值],[列值])); 或: insert into table values ([列值],[列值])); 批量插入 insert into table ([列名],[列名]) VALUES ([列值],[列值]), ([列值],

九离的博客 754

【AI概念】迁移学习 vs. 域自适应 vs. 域泛化|定义、核心原理、数学表达、易混淆点与工程选择建议|实际案例、工程实现细节、未来研究趋势、实际应用场景

大家好,我是爱酱。本篇将会详细梳理迁移学习(Transfer Learning)、域自适应(Domain Adaptation)、域泛化(Domain Generalization)三大常被混淆的核心概念,结合数学公式、典型算法与实际应用场景,帮助你厘清它们的本质区别、联系与工程意义。 注:本文章含大量数学算式、详细例子说明及大量代码演示,大量干货,建议先收藏再慢慢观看理解。新频道发展不易,你们的每个赞、收藏跟转发都是我继续分享的动力!

AI人工智能爱酱~你的AI学习好帮手~ 2465

mysql数据库如何批量插入_MyBatis批量插入数据实现(MySQL)

一、SQL层面实现数据插入先复习一下单条/批量插入数据的sql语句怎么写:单条插入数据的写法:insert into table ([列名],[列名]) values ([列值],[列值]));或:insert into table values ([列值],[列值]));批量插入一种可以在代码中循环着执行上面的语句,但是这种效率太差。另一种,可以用mysql支持的批量插入语句,这种方式相比起来...

weixin_28716217的博客 1332

RK3588开发板DDR频率上不去?手把手教你用ddrbin_tool降频调优(附完整配置流程)

本文详细介绍了RK3588开发板DDR频率调优的完整解决方案,重点使用ddrbin_tool工具进行降频配置。从硬件原理分析到实战操作,包括参数导出、频率调整、二进制生成及烧录验证,帮助开发者解决DDR高频不稳定问题,提升系统可靠性。适用于嵌入式开发、工业控制等场景。

weixin_42713608的博客 542

ch32v103xx 烧写

烧写方式 串口uart, usb,swd(wch link)但不建议按此使用,参官方说明。

qq_39239990的博客 636

mysqlplus 批量插入_MyBatis批量插入数据实现(MySQL)

一、SQL层面实现数据插入先复习一下单条/批量插入数据的sql语句怎么写:单条插入数据的写法:insert into table ([列名],[列名]) values ([列值],[列值]));或:insert into table values ([列值],[列值]));批量插入一种可以在代码中循环着执行上面的语句,但是这种效率太差。另一种,可以用mysql支持的批量插入语句,这种方式相比起来...

weixin_39776787的博客 551

JSBSim开发手册:飞机仿真模型开发指南

JSBSim是一款开源的飞行动力学模型仿真引擎,支持多种飞行器的仿真,包括固定翼飞机、直升机、无人机等。JSBSim的设计目标是提供一个灵活、高效、精确的飞行动力学仿真环境。飞行动力学仿真:实现飞行器的动力学仿真,包括空气动力学、发动机、质量和惯性等模型。控制系统仿真:实现飞行器的控制系统仿真,包括自动驾驶仪、飞控系统等。环境仿真:模拟飞行环境,包括大气模型、风力模型等。本文详细介绍了如何使用C++进行JSBSim开发,包括系统设计、模型实现、代码优化和性能调优等方面的内容。

qq_38334677的博客 4524

mysqlplus 批量插入_MyBatis批量插入数据实现(MySQL)

假如需要搬一万块砖到楼顶,有一部电梯,电梯一次可以放适量的砖(最多放 500)。可以选择一次运送一块砖,也可以一次运送 500 块砖,哪个时间消耗大?一、SQL层面实现数据插入单条插入数据的写法:insert into table ([列名],[列名]) values ([列值],[列值]));或:insert into table values ([列值],[列值]));批量插入一种可以在代码...

weixin_39834205的博客 617

使用 MATLAB/Simulink 对风光互补发电系统进行建模

随着全球对清洁能源的需求日益增长,风力发电和光伏发电作为两种主要的可再生能源形式,在电力供应中的占比越来越高。然而,由于风电和光伏的间歇性和不确定性,单独依赖其中任何一种能源都会给电网带来挑战。因此,风光互补发电系统(Wind-PV Hybrid System)应运而生,通过合理配置风力发电机和光伏电池板的数量,可以有效提高系统的稳定性和可靠性。此外,为了确保整个电力系统的安全稳定运行,还需要研究风光互补发电系统与主网之间的协调调度策略。本教程将详细介绍如何使用。

amy_mhd的博客 117

15、分布式查询处理详解

本博文深入探讨了分布式环境下的查询处理与优化技术。从查询处理的基本概念出发,分析了在分布式系统中执行查询所面临的额外挑战,并通过实例比较了不同的执行策略。文章详细介绍了查询优化的组成要素,包括搜索空间、成本模型和搜索策略,同时涵盖了查询处理的多个层次以及数据本地化的核心方法。此外,还讨论了连接排序优化、分布式成本模型以及多种查询优化方法,如静态优化、动态优化和混合优化。最后,提出了自适应查询处理的概念,旨在提高分布式查询的灵活性和效率。通过综合应用这些技术,可以有效提升分布式数据库的查询性能,降低通信和计算

gan8painter的博客 71

Mybatis 实现Mysql批量插入数据,判断数据是否存在

常见插入数据的SQL insert into 插入数据库时会检查主键是否存在,存在会报错 replace into 替换数据库记录,需要表中有主键或者unique索引,如果数据库已存在的数据,会先删除该数据然后新增。不存在的数据效果和insert into 一样。 <insert id="insertInfoBatch" parameterType="java.util.List...

qq_41611829的博客 1万+

Python爬取谷歌学术全攻略:基于Playwright与Asyncio的高效、抗反爬虫实践

同时,文章将详细解析爬虫过程中可能遇到的各种挑战,如IP封锁、验证码、动态内容加载等,并提供切实可行的解决方案。self.logger.info(f"第 {current_page} 页解析完成,共找到 {len(page_results)} 条结果。:谷歌学术的HTML结构并非一成不变,其CSS类名和标签结构可能会发生变化,且不同地区、不同语言的界面可能存在差异,增加了数据解析的难度。self.logger.info(f"开始搜索关键词: '{keyword}',计划爬取 {max_pages} 页")

2201_76125261的博客 1550

xml批量更新mysql数据库表_MyBatis动态批量插入、更新Mysql数据库的通用实现方案...

一、业务背景由于需要从A数据库提取大量数据同步到B系统,采用了tomikos+jta进行分布式事务管理,先将系统数据源切换到数据提供方,将需要同步的数据查询出来,然后再将系统数据源切换到数据接收方,进行批量的插入和更新操作,二、批量插入的具体实现1.查询需要同步的数据:@AutowiredSysPersonPOMapper sysPersonPOMapper;public voiddataDs()...

weixin_32006353的博客 1023

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

mysql 动态更新数据库_MyBatis动态批量插入、更新Mysql数据库的通用实现方案

一、业务背景由于需要从A数据库提取大量数据同步到B系统,采用了tomikos+jta进行分布式事务管理,先将系统数据源切换到数据提供方,将需要同步的数据查询出来,然后再将系统数据源切换到数据接收方,进行批量的插入和更新操作,二、批量插入的具体实现1.查询需要同步的数据:@AutowiredSysPersonPOMapper sysPersonPOMapper;public voiddataDs()...

weixin_39851261的博客 415

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

mysql批量添加list数据_mybatis 批量将list数据插入到数据库的实现

随着业务需要,有时我们需要将数据批量添加到数据库,mybatis提供了将list集合循环添加到数据库的方法。具体实现代码如下:1、mapper层中创建 insertForeach(List < Fund > list) 方法,返回值是批量添加的数据条数package com.center.manager.mapper;import java.util.List;import org.a...

weixin_29313547的博客 2050

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

MyBatis动态批量插入、更新Mysql数据库的通用实现方案

一、业务背景   由于需要从A数据库提取大量数据同步到B系统,采用了tomikos+jta进行分布式事务管理,先将系统数据源切换到数据提供方,将需要同步的数据查询出来,然后再将系统数据源切换到数据接收方,进行批量的插入和更新操作, 关于数据源的切换可以参考之前的文章《spring+springMVC+Mybatis架构下采用AbstractRoutingDataSource、atomikos、JTA实现多数据源灵活切换以及分布式事务管理》 二、批量插入的具体实现   1.查询需要同步的数据: @

AlbenXie的博客 945
上一篇: MySQL 服务端和客户端交互过程
下一篇: SpringCloud 相关
JFS_Study
博客等级 码龄6年 363粉丝 359原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JFS_Study

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值