insert返回主键 — mybatis selectKey

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

日常项目开发中,经常会用到一个场景:在表中新增一条数据,需要得到该条数据的主键ID。如何不额外写一条查询语句来得到新增数据的主键ID呢?mybatis的selectKey实现了这个功能。

mybatis的selectKey在不同数据库中的用法有点区别:

oracle中的用法

 <insert id="insertUser" parameterClass="XXX.user"> 
          <selectKey resultClass="long" keyProperty="id"order="BEFORE"> 
              select SEQ_USER_ID.nextval as id from dual 
          </selectKey> 
           insert into user  (id,name,password) 
          values (#{id},#{name},#{password}) 
      </insert> 

这句话会在插入user之前执行(order=“BEFORE”),该句话执行完之后,通过SEQ_USER_ID.nextval生成一个ID,传进来的参数User对象里的id字段就会被赋值成sequence的值,通过user.id即可获取新增数据的主键ID。

mysql中的用法

<insert id="insertUser" parameterClass="XXX.user"> 
      insert into user (name,password) values (#{id},#{name},#{password}) 
      <selectKeykeyProperty="id" order="AFTER" resultType="java.lang.Integer">  
            SELECT LAST_INSERT_ID() AS ID  
      </selectKey>  
 </insert> 

该种用法是通过LAST_INSERT_ID() 获得刚插入的自动增长的id的值。插入之后获得ID赋值到传进来的对象中,通过user.id获取。

SelectKey用法详解:

1、SelectKey因为可以很随意的设置生成主键的方式,所以用在Mybatis中是为了解决Insert数据时不支持主键自动生成的问题。使用它可以得到sequence的值(比如用在oracle中,就可以使用SEQ_USER_ID.nextval来生成一个主键),同时也会将值返回。对于不同的数据库有不同的操作方式。

2、SelectKey标签中有一个order属性,在不同的数据库中有不同的用法:
1)在支持自动增长类型的数据库(mysql)中,order需要设置为after才会取到正确的值。新增数据的时候mysql数据库通过自增取得主键ID,然后将值返回;
2)像Oracle这样取序列的情况,需要设置为before。通过序列化方法生成一个主键ID,之后插入数据库。

3、属性
在这里插入图片描述

避坑必看:很详尽的MyBatis返回自增主键实验(包括插入或更新SQL语句insert on duplicate key update的自增主键返回情况) 目录 1. 实验对比维度 (1)单纯的insertinsert on duplicate key update (2)selectKey和useGeneratedKeys (3)@Param和parameterType (4)单个和批量 (5)keyProperty写法 2. 基本概念介绍 (1)插入或更新SQL(简称InsertOrUpdate) (2)selectKey和u... 阅读详情

相关推荐

YOLOv8+ByteTrack实战:5分钟搞定多目标跟踪(附鱼群检测调参秘籍)

本文详细介绍了如何利用YOLOv8和ByteTrack快速实现多目标跟踪,特别针对鱼群检测等复杂场景提供参数调优秘籍。通过环境配置、核心机制解析和专项调优技巧,开发者可在5分钟内搭建高效跟踪系统,适用于水产养殖、交通监控等实际应用。文章还包含工程落地方案和性能优化建议,帮助实现精准的鱼群计数与行为分析。

e1f2g的博客 1002

mybatis——insertselectKey

在mapper.xml文件中  &lt;insert id="insertUser" parameterType="User"&gt;     &lt;selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer"&gt;         select count(*) from user  

苏云南雁的博客 1745

STM32电机PID速度控制

2.3 STM32电机PID速度控制 之前的文章,完成了直流减速电机的PWM控制、电机测速。本篇文章,将实现电机的速度闭环控制。 在公众号:小白学移动机器人,发送:速度PID,即可获得本篇文章的STM32工程文件以及相关资料。 2.3.1 解决的问题 解决带编码器直流电机的速度闭环问题。 2.3.2 PID理论 将偏差的比例、积分、微分,通过线性组合构成控制量,用控制量对被控对象进行控制,这样的控制器称为PID控制器。在连续空间中,我们通常探讨模拟PID的控制原理,如图所示: 我们这里用电机速度控制为例,

「小白学移动机器人」一个专注分享移动机器人相关知识的公众号! 6万+

MyBatis insert语句selectKey标签和返回主键

一、简要概述 keyProperty:对应的domain 对象中需要被赋值的属性,一般是主键 resultType:表示的是返回主键的类型 order:如果设置为 BEFORE,那么它会首先选择主键,设置 keyProperty 然后执行插入语句。如果设置为 AFTER,那么先执行插入语句,然后是 selectKey 元素 注意:SelectKey需要注意order属性,像MySQL一类支持自动增长类型的数据库中,order需要设置为after才会取到正确的值,像Oracle这样取序列的情况,需要设置为b

xiaoleilei666的博客 1752

mybatis学习 --- insertselectKey(插入后返回数据库自动生成的id)

前言 insert 插入标签并不难 只是为了注意一下,insert还有一些细节 目的 如果你的数据库支持自动生成主键的字段(比如 MySQL 和 SQL Server),那么你插入时没有设置id的值,返回是如何获取插成功工完整的一行信息呢? 如果只判断成功,并把之前的值拿来使用,有缺少一个id的值,那么你还必须查询该值 方法一:使用selectKey 标签属性 看一下官网是怎么说的 官网说可以用它来生成主键 返回自动生成的ID LAST_INSERT_ID() 函数在mysql中是返回最后一个插入

赵成默 2161

mybatis学习之路----insert主键返回 selectKey使用

点滴记载,点滴进步,愿自己更上一层楼。

小菜鸟的专栏 5万+

mybatis自定义sql insert报错:selectKey不起作用、以及报错找不到getter方法

1)如果要使用selectKey提前自动生成字段ID,就在mapper interface方法定义中,如果使用@param。就需要在使用insert语句中,通过@param指定的名称来方位bean的属性;如果不使用@param就可以省去名称。2)使用selectKey获取多列数据时,千万不要在keyProperty中的列之间加空格(一般处于编码习惯,都会自然而然的加一个空格)。就这个例子来说,不使用@param会更简洁。然后代码就能够正常运行了。

hangsun的博客 861

Mybatis insert主键返回 selectKey使用

通常在表中设置这个UUID为主键,那么希望它能在插入数据的时候自动生成 &lt;insert id="" parameterType=""&gt; &lt;selectKey keyProperty="approvalId" resultType="java.lang.String" order="BEFORE"&gt; select replace(uuid()

菜鸟逆袭之路 8063

mybatis mysql insert返回主键_MyBatisinsert语句返回主键selectKey标签

往数据库中插入一条记录后,有时候我们需要这条记录的主键,用于后续的操作。如果在插入后再去查一次数据库,显然不够优雅和效率,MyBatis中已经有了insert返回主键的功能,下面就主要讲几种不同情况的具体做法。1.主键自增的情况对于MySQL和Sql Server这种支持主键自增的数据库,可以设置useGeneratedKeys="true"和keyProperty。例如现在有一个表 tbl_e...

weixin_42361764的博客 731

MyBatisinsert语句返回主键selectKey标签

本文已同步至个人博客liaosi's blog - MyBatisinsert语句返回主键selectKey标签 往数据库中插入一条记录后,有时候我们需要这条记录的主键,用于后续的操作。如果在插入后再去查一次数据库,显然不够优雅和效率,MyBatis中已经有了insert返回主键的功能,下面就主要讲几种不同情况的具体做法。 1.主...

weixin_34032792的博客 481

Mybatis里Mapper映射sql文件里insert主键返回selectKey使用

有时候新增一条数据,知道新增成功即可,但是有时候,需要这条新增数据的主键,以便逻辑使用,再将其查询出来明显不符合要求,效率也变低了。 这时候,通过一些设置,mybatis可以将insert的数据的主键返回,直接拿到新增数据的主键,以便后续使用。 这里主要说的是selectKey标签 设计表的时候有两种主键,一种自增主键,一般为int类型,一种为非自增的主键,例如用uuid等。 自...

dichengyan0013的博客 487

mybatis3 :insert返回插入的主键selectKey

Mysql: 主键自增长。 加上:keyProperty="id"就可以获得了。 <insert id="insert" parameterType="entity" keyProperty="id" useGeneratedKeys="true"> insert into <include refid="t_user"/> (name, code, ver...

weixin_30849591的博客 106

Mybatis(diary)---获取新增数据主键insert 主键返回-selectKey

<!--新增信息,并拿到新增信息的表主键信息。 新增数据,得到主键的外层写法没什么特别,跟普通的insert一样。只不过里面加了selectKey--> <insert id="insertAndgetkey" parameterType="com.soft.mybatis.model.User"> <!--sel...

qq_39248664的博客 266

java insert 返回主键_MyBatisinsert操作返回主键的实现方法

在使用MyBatis做持久层时,insert语句默认是不返回记录的主键值,而是返回插入的记录条数;如果业务层需要得到记录的主键时,可以通过配置的方式来完成这个功能针对Sequence主键而言,在执行insert sql前必须指定一个主键值给要插入的记录,如Oracle、DB2,可以采用如下配置方式:SELECT SEQ_TEST.NEXTVAL FROM DUALinsert into categ...

weixin_35656285的博客 517

java insert 返回主键_MyBatisinsert操作返回主键的实现方法 – java – www.cfei.net

在使用MyBatis做持久层时,insert语句默认是不返回记录的主键值,而是返回插入的记录条数;如果业务层需要得到记录的主键时,可以通过配置的方式来完成这个功能针对Sequence主键而言,在执行insert sql前必须指定一个主键值给要插入的记录,如Oracle、DB2,可以采用如下配置方式:SELECT SEQ_TEST.NEXTVAL FROM DUALinsert into categ...

weixin_30814157的博客 440

关于Mybatis-plus的Insert操作,返回主键问题

>关于Mybatis-plus的Insert操作,返回主键问题 Mybatis-plus默认存储完数据后,自动向传进来的实体类塞入主键ID.所以理论上无需做多余的配置. 如果是mybatis就需要在xml文件中做配置.下文有. >Mybatis-plus使用QueryWrapper 按照惯例先奉上mybatis plus官方文档的链接https://baomidou.com/pages/10c804/,有精力的可以进去学习一下。 queryWrapper是mybatis plus中实现查询

卷NM呢!不干了! 1万+

mybatis insert数据 主键返回

<insert> <!--selectKey主键返回,需要再返回--> <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">select LAST_INSERT_ID()</selectKey> </insert> 添加sele...

qq_33358408的博客 148
上一篇: 当我谈跑步时我谈些什么——村上春树
下一篇: Jdk1.8新特性(一) 接口的default方法
May的博客
博客等级 码龄11年 682粉丝 322原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值