mybatis批量新增返回主键问题

spring boot集成mybatis-plus——Mybatis Plus 新增数据并返回主键 ID(图文讲解) Mybatis Plus 新增数据并返回主键 ID(图文讲解) 更新时间 2023-01-10 15:37:37 大家好,我是小哈。 本小节中,我们将学习如何通过 Mybatis Plus 框架给数据库表新增数据,主要内容思维导图如下: Mybatis Plus 新增数据思维导图 表结构 为了演示新增数据,在前面小节中,我们已经定义好了一个用于测试的用户表, 执行脚本如下: DROP TAB... 阅读详情

mybatis批量新增返回主键问题

简洁明了,不要前言,不要文字介绍,不要拖拖拉拉…

在Mybatis场景下做单条记录新增操作如下

<insert id="insertUser" parameterType="com.cg.input.UserInput">
	insert into t_user(username,password,role)
	values (
		#{username,jdbcType=VARCHAR},
		#{password,jdbcType=VARCHAR},
		#{role,jdbcType=VARCHAR}
	)
</insert>

返回主键id

<insert id="insertUser" parameterType="com.cg.input.UserInput" keyProperty="id" useGeneratedKeys="true">
	insert into t_user(username,password,role)
	values (
		#{username,jdbcType=VARCHAR},
		#{password,jdbcType=VARCHAR},
		#{role,jdbcType=VARCHAR}
	)
</insert>

批量新增
方式一:

<insert id="insertUser" parameterType="com.cg.input.UserInput">
	insert into t_user(username,password,role)
	values 
	<foreach collection = "users" item = "item" separactor = ",">
		(
			#{item.username,jdbcType=VARCHAR},
			#{item.password,jdbcType=VARCHAR},
			#{item.role,jdbcType=VARCHAR}
		)
	</foreach>
</insert>

方式二:

<insert id="insertUser" parameterType="com.cg.input.UserInput">
	<foreach collection = "users" item = "item" separactor = ";">
		insert into t_user(username,password,role)
		values 
		(
			#{item.username,jdbcType=VARCHAR},
			#{item.password,jdbcType=VARCHAR},
			#{item.role,jdbcType=VARCHAR}
		)
</insert>

这两种的方式都可实现批量新增的操作,但区别是第一个仅执行了一次sql语句,第二个循环执行了多个sql语句。但第二种方式有一个优点就是通过标签筛选条件来动态构建sql

<insert id="insertUser" parameterType="com.cg.input.UserInput">
	<foreach collection = "users" item = "item" separactor = ";">
		insert into t_user
		<trim prefix="(" suffix=")" suffixOverrides="," >
			<if test = "item.username != null and item.username != ''">
				username,
			</if>
			<if test = "item.password != null and item.password!= ''">
				password,
			</if>
			<if test = "item.role != null and item.role  != ''">
				role,
			</if>
		</trim>
		values 
			<trim prefix="values (" suffix=")" suffixOverrides="," >
				<if test = "item.username != null and item.username != ''">
					#{item.username,jdbcType=VARCHAR},
				</if>
				<if test = "item.password != null and item.password!= ''">
					#{item.password,jdbcType=VARCHAR},
				</if>
				<if test = "item.role != null and item.role  != ''">
					#{item.role,jdbcType=VARCHAR},
				</if>
			</trim>
</insert>

从上面看来你以为我就为了搞这么基础的玩意儿,就写一篇文章吗?你错了!以下才是我针对于实际业务上所遇到问题的一个记录。

虽然以上两种方式都可实现批量新增的操作,性能效率咱先不谈,在某个业务场景下,当我们需要进行批量新增后还要返回新增多条数据后的多个主键id时,第二种方法就必须pass,我们知道返回主键id是需要在Mybatis的语句标签上添加keyProperty=“id”(或者keyColumn)和useGeneratedKeys="true"的操作,我们指定了返回的key,而如果我们使用第二种方法来执行了多条sql,即使加上了以上的操作也无法返回主键id,我们必须保证当前执行的sql为一条sql。

所以我们只能这么玩儿:

<insert id="insertUser" parameterType="com.cg.input.UserInput" keyProperty="id" useGeneratedKeys="true">
		insert into t_user
		(
			username,
			password,
			role
		)
		values 
		<foreach collection = "users" item = "item" separactor = ",">
		(
			#{item.username,jdbcType=VARCHAR},
			#{item.password,jdbcType=VARCHAR},
			#{item.role,jdbcType=VARCHAR}
		)
		</foreach>
</insert>

菜鸟记录,大神勿喷!!!

Mybatis批量插入返回自增主键 我们都知道Mybatis在插入单条数据的时候有两种方式返回自增主键: 1、对于支持禅城自增主键的数据库:useGenerateKeys和keyProperty。 2、不支持生成自增主键的数据库:。 但是怎对批量插入数据返回自增主键的解决方式网上看到的还是比较少,至少百度的结果比较少。 Mybatis官网资料提供如下: First, if your database support... 阅读详情

相关推荐

解决SqlServer自增主键使用MybatisPlus批量插入报错问题

org.springframework.jdbc.UncategorizedSQLException: Error getting generated key or setting result to parameter object. Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 必须执行该语句才能获得结果

小鲁蛋的博客 2256

Mybatis批量插入并返回主键

mybatis插入返回主键

qq_43473129的博客 3821

mybatis-batchInsert问题

使用mybatis进行批量新增并得到主键的问题 问题描述 最近在练手一个自行车项目,有一个自行车购买的功能: 向服务器发送一个购买请求,获得一个订单号,完成后补全信息。涉及到三张表: 补全是发送的JSON如下: 由于订单中每一辆自行车的bicycle_id都要被写在bicycle_order_detail表中,于是我选择了先批量新增自行车,拿到主键后在批量新增detail { "order": { "orderId": 10000046, "orderCod

qq_34399563的博客 1018

Mybatis批量插入并返回主键id的方法

【代码】Mybatis批量插入并返回主键id的方法。

轻笺的博客 1887

Mybatis 新增/批量新增, 拿到返回的自增主键ID

Mybatis 新增/批量新增, 拿到返回的自增主键ID

默默不代表沉默 2680

Mybatis批量插入数据返回主键的实现

主要介绍了Mybatis批量插入数据返回主键的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

Mybatis批量新增生成主键ID只能返回一个其余为null的问题

批量新增一批数据,返回这批数据的主键ID用于关联其他数据,数据库:MySql。

牛马乘虚猿的博客 1318

从选卡到验证:CST仿真GPU加速全流程实战指南

本文详细介绍了CST仿真中GPU加速的全流程实战指南,从硬件选型到软件配置,再到性能验证和常见问题排查。通过对比专业卡与游戏卡的性能差异,提供硬件选型建议,并分享驱动安装、关键设置及CST软件配置的黄金法则,帮助用户显著提升仿真效率。

weixin_30650039的博客 394

mybatis批量插入返回自增ID

返回ID的要求: 1.dao中不要出现@param注解,集合变量名请使用list 2.collection对应的值请使用list 解释: 当我们传递一个 List 实例或者数组作为参数对象传给 MyBatis。MyBatis 会自动将它包装在一个 Map 中,名称为key。List 实例将会以“list” 作为key 而数组实例将会以“array”作为value。所以,当我们传递的是一个List集合时,mybatis会自动把我们的list集合包装成以list为Key值的map。如1要求不使用指定key的话,

weixin_42255981的博客 2008

miRNA测序数据生信分析——第一讲,总结概述

这里的miRNA测序指转录水平的测序。这里每一个数据库都可以在线访问,但是如果要本地使用,都需要进行数据库文件下载,整理。

weixin_44616693的博客 4953

实战:GMTSAR软件处理陆探一号SAR数据

摘要:陆探一号(LT-1)是我国首组L波段差分干涉SAR卫星星座,具备全天候多极化成像能力,主要服务于自然资源监测等领域。文章详细介绍了其轨道参数(607km太阳同步轨道)和传感器技术指标(5种成像模式)。同时阐述了开源InSAR处理软件GMTSAR的安装方法(基于Ubuntu系统)及实验流程,包括数据准备、DEM生成和干涉处理步骤,特别说明了轨道数据缺失时的MATLAB插值处理方法。该研究为国产SAR卫星数据处理提供了技术参考。

一个RSer的博客 1033

oracle 增删改查 日志,Mybatis增删改查之Oracle

Mybatis增删改查之Oracle一. 查询普通查询(返回普通的持久层对象,由于数据库字段风格和java不同,所以建立一个map映射)select RC_ID,RULE_CAT1,RULE_CAT2,RC_OPER_TYPE,RULE_REF,START_EFFECT_TIME,END_EFFECT_TIME,BOND_CODE_1,BOND_CODE_2,BP_THRESHOLD,RC_STA...

weixin_42311530的博客 574

【YOLOv8-pose姿态识别部署至RK3588:模型训练到RKNN落地,让人体姿态分析精度与边缘推理速度双突破】

本教程从YOLOv8-pose模型的姿态识别训练,到RK3588的边缘量化部署,为你打造了一套“高精度+高实时性+低成本”的人体姿态分析解决方案。无论是健身动作纠正、智能安防行为检测,还是工业人员姿态监控,这套技术都能直接复用——你只需替换数据集与业务逻辑,即可快速落地专属的边缘AI姿态识别系统。如果你在实践中遇到任何卡点,欢迎随时交流。记住,人体姿态识别的价值在于“关键点准、推理快、部署易”,而这三者的平衡,正是你通过本教程能掌握的核心能力。

FJN110的博客 329

Mybatis新增数据并返回主键id

所谓的自定义使用时Mybatis官方对外提供的一些没有自增主键的数据库而生成的一种方式。例如,Oracle数据库就没有自增情况,所以需要自定义来获取。注意:keyPropety属性必须采用insert表中的id的别名。具体的可看下面截图。

2401_85207246的博客 8599

【ARM CoreLink 系列 7 -- TZC-400控制器简介】

为了确保内存能够正确识别总线的信号控制位,新增一个TrustZone地址空间控制器(TrustZone Address Space Controller,TZASC)组件来实现对内存地址的安全扩展,将内存区域划分为安全内存区域和非安全内存区域,安全世界可以访问安全内存和非安全内存,而普通世界只能访问非安全内存,如下图所示:图 1-1内存区域的划分是在系统启动时通过配置 TZASC 组件(TZC-400/TZC-380)来实现的。TZC-400由和使能情况;安全访问权限;Base地址;

CodingCos的博客 1634

别再用LabelImg了!我手搓了一个C#“一站式”YOLO工具箱,标注训练推理全搞定

这个工具箱目前已经在两个小型产线项目中试用,反馈非常好。效率提升:原本需要 2 天完成的“数据准备 - 训练 - 验证”循环,现在缩短到了 2 小时。门槛降低:产线技术员经过 10 分钟培训,就能独立完成新产品的模型迭代。当然,它还有改进空间未来计划集成主动学习功能:自动筛选出置信度低的图片,推荐优先标注。支持多模型管理:方便在不同产品型号间快速切换。增加PLC 通信模块:直接在推理界面配置 IO 信号,实现真正的软硬联动。最后想说工具的本质是服务于人。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 442

MyBatis实现新增返回自增主键

添加记录后获取主键ID,这是一个很常见的需求,特别是在一次前端调用中需要插入多个表的场景。 除了添加单条记录时获取主键值,有时候可能需要获取批量添加记录时各记录的主键值,MyBatis从3.3.1版本开始支持批量添加记录并返回各记录主键字段值。 mybatis提供了不少操作sql语句的标签,其中包括了新增的标签,其返回与主键相关属性也是该标签提供的,与返回主键相关的属性如下: 属性 描述 keyProperty (仅对insert和update有用)此属性的作用是将插入或更新操作时的返回值赋

weixin_44519188的博客 7191

基于YOLOv10的微小目标检测,多头检测器提升小目标检测精度

引入多头检测器助力YOLOv10,暴力提升小目标检测性能

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

Mybatis中的批量修改,批量删除,批量新增,和新增后返回主键

1.批量修改,批量删除,批量新增 1)批量更新 &lt;update id="dwdatalink_delete_task_instances_byids" parameterType="java.util.Map"&gt; UPDATE data_link_task_run SET is_deleted = '1', sys_update = C...

qq_28060549的博客 4374

YOLOv13改进策略【Neck篇】| GSConv 轻量卷积,Slim-Neck 减参数还不掉点

Neck 篇的第二篇继续"替换式"改进,这次的对象是 Neck 里的下采样卷积。GSConv 出自《Slim-neck by GSConv: a better design of lightweight detector》(2022),它的出发点:DWSConv(深度可分离)轻但"信息混不进通道",标准卷积重但表达好——GSConv 用GConv(分组卷积)混通道 + DWConv 补空间 + Channel Shuffle 打散,两全其美。

qq_53329130的博客 30

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Mybatis框架新增数据返回主键id

Mybatis框架下新增数据返回主键id业务场景一、通过实体类实现实体类:mapper.xml文件ProductDao:controller:二、通过Map容器实现三、总结 业务场景 在日常开发的时候,经常会插入一条数据到数据库,并且我们需要知道插入的数据信息,这里仅做一个实现的简单记录。 一、通过实体类实现 需要新增的信息放入对应的实体类中,然后将这个类作为参数,在新增成功之后会将新增的id返回...

SGdan_qi的博客 8207

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

mybatis获取新增记录的主键

最近项目中有个需求,需要在新增一条记录后返回该记录的主键,查了下资料,用mybatis可以做 我需要拿第一个方法执行返回的id作为变量传给下面,数据库中该id是记录主键,并且数据库用的是主键自增长,这是前提。 有两种方式: 第一种方式写法如下: 主要是<selectKey>标签,下面是正常的insert语句的写法,<selectKey>是有resultTyp...

leaves_story的博客 1万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

mybatis中批量新增后返回自增的主键id

1.mybatis中insert后返回自增的主键id <insert id="insertSelective" parameterType="pd" useGeneratedKeys="true" keyProperty="drillid"> insert into drill <trim prefix="(" suffix=")" suffixOverri...

qq_28433521的博客 1406

Mybatis新增返回主键ID

在做项目的过程中有时候难免会运用到新增一条数据并获取到新增的这条数据的主键ID,这样的一个功能,新增一条订单数据,并返回新增订单的ID。这样做的前提是数据的ID必须为自增。 我是用ssm框架做的项目,首先在mapper包里对应接口定义一个返回主键的方法 随后在对应的mapping的实现的xml文件里的新增返回主键的语句添加一个useGeneratedKeys = true和一个keyProper...

luckyou1201的博客 4722

mybatis批量修改,批量新增

mybatis批量修改、批量新增sql语句 1、单个新增 <insert id="insert" parameterType="com.test.User"> INSERT INTO t_user (user_name,mobile) VALUES (#{userName}, #{mobile}) SELECT @@IDENTITY AS id </insert> 2、批量新增 <in

wang_yi_l的博客 1万+

mybatis 批量插入返回多个主键,低版本有bug

Mybatis批量插入返回多个主键 论坛有人有需求批量插入的时候返回多个对应的主键 热心的托尼老师就帮忙写了个例子测试。测试了两个Mybatis版本,低版本的不支持,大家注意了了。 <insert id="insertBatchInterest" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id"&g...

rui888的博客 6797
上一篇: 一文彻底搞懂ThreadLocal
下一篇: Jenkins自动化部署
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值