MyBatis 插入记录同时获取主键
MyBatis 插入记录同时获取主键
MyBatis 插入记录同时获取主键的系统界面
useGeneratedKeys 属性
keyProperty 属性
keyColumn 属性
selectKey 元素
注意点: 获取的主键的主键被设置到对象的属性中,而不是当作返回值。
useGeneratedKeys属性实现,指定值为 true,则 MyBatis 会自动插入记录生成的主键放入对象中。
useGeneratedKeys 属性,这种方法只适用于支持自增主键的数据库。如 MySQL ,不适用于序列主键的 Oracle 。Mybatis 会使用 JDBC 的 getGeneratedKeys 方法来取得由数据库内部生成的主键。获得主键的值后赋给 keyProperty 配置的属性,当需要设置多个属性时使用逗号隔开,多个主键的还需要设置 keyColumn 属性,按顺序指定数据库的列,这里列的值会与 keyProperty 配置的属性一一对应。
<insert id="insert" parameterType="com.pinyougou.pojo.TbSpecification" useGeneratedKeys="true" keyProperty="id" keyColumn="id">
insert into tb_specification (id, spec_name)
values (#{id,jdbcType=BIGINT}, #{specName,jdbcType=VARCHAR})
</insert>
selectKey元素实现。
该方式支持所有数据库,无论是自增主键还是序列主键的。
在 MySQL 数据库中,order 属性设置为 AFTER ,因为当前记录的主键值在 insert 语句执行成功后才能获取到。而在 oracle 数据库中,order 属性设置为 BEFORE , Oracle 需要先从序列获取值再把值插入数据库中。
<!-- 演示 -->
<selectKey resultType="Integer" order="AFTER" keyProperty="user.userId">
SELECT LAST_INSERT_ID() AS userId
</selectKey>
<!-- 实例 -->
<insert id="insert" parameterType="com.pinyougou.pojo.TbGoods" >
<selectKey resultType="Long" keyProperty="id" keyColumn="goodsId" order="AFTER">
SELECT LAST_INSERT_ID() AS goodsId
</selectKey>
insert into tb_goods (
id,
seller_id,
goods_name,
default_item_id,
audit_status,
is_marketable,
brand_id,
caption,
category1_id,
category2_id,
category3_id,
small_pic,
price,
type_template_id,
is_enable_spec,
is_delete
)
values (
#{id,jdbcType=BIGINT},
#{sellerId,jdbcType=VARCHAR},
#{goodsName,jdbcType=VARCHAR},
#{defaultItemId,jdbcType=BIGINT},
#{auditStatus,jdbcType=VARCHAR},
#{isMarketable,jdbcType=VARCHAR},
#{brandId,jdbcType=BIGINT},
#{caption,jdbcType=VARCHAR},
#{category1Id,jdbcType=BIGINT},
#{category2Id,jdbcType=BIGINT},
#{category3Id,jdbcType=BIGINT},
#{smallPic,jdbcType=VARCHAR},
#{price,jdbcType=DECIMAL},
#{typeTemplateId,jdbcType=BIGINT},
#{isEnableSpec,jdbcType=VARCHAR},
#{isDelete,jdbcType=VARCHAR}
)
</insert>
MySQL 数据库中测试
SELECT LAST_INSERT_ID() AS userId;
insert into tb_brand values(null, '1', '2');
LAST_INSERT_ID() 可以获取插入记录的 id ,但是应该开启事务吧。因为执行了2条语句。
以下是其它支持自增主键的数据库配置 selectKey 中返回主键的 SQL
DB2 VALUES IDENTITY_VAL_LOCAL()
MYSQL SELECT LAST_INSERT_ID()
SQLSERVER SELECT SCOPE_IDENTITY()
CLOUDSCAPE VALUES IDENTITY_VAL_LOCAL()
DERBY VALUES IDENTITY_VAL_LOCAL()
HSQLDB CALL IDENTITY()
SYBASE SELECT @@IDENTITY
DB2_MF SELECT IDENTITY_VAL_LOCAL() FROM SYSIBM.SYSDUMMY1
INFORMIX select dbinfo(‘sqlca.sqlerrd1’) from systables where tabid=1
MyBatis 插入记录同时获取主键的更多相关文章
- mybatis插入数据并获取主键值
有时候我们的主键是自增的,但是我们想要在插入一条数据以后获取这条数据的主键值,而我们知道,mybatis执行完插入操作以后返回的是生效的记录数.那如何才能获取这个主键值呢. 1.在配置文件mapper ...
- MyBatis插入记录时返回主键id的方法
有时候插入记录之后需要使用到插入记录的主键,通常是再查询一次来获取主键,但是MyBatis插入记录时可以设置成返回主键id,简化操作,方法大致有两种. 对应实体类: public class User ...
- mybatis插入的同时获取主键id
<insert id="insertAndReturnId" parameterType="com.qianlong.cms.entity.AppCmsRole&q ...
- Mybatis 插入操作时获取主键 (Oracle 触发器与SEQ)
1.通过Oracle序列 -- Create sequence create sequence SEQ_DW_EWSYSTEM minvalue 1 maxvalue 9999999999999999 ...
- mybatis添加记录时返回主键id
参考:mybatis添加记录时返回主键id 场景 有些时候我们在添加记录成功后希望能直接获取到该记录的主键id值,而不需要再执行一次查询操作.在使用mybatis作为ORM组件时,可以很方便地达到这个 ...
- SpringBoot整合MyBatis获得插入数据后获取主键,返回值总是1
xml里的写法 <insert id="insertLogin" parameterType="com.xyt.p2p.pojo.LoginInfo" k ...
- mybatis 插入数据时返回主键
在使用MyBatis做持久层时,insert语句默认是不返回记录的主键值,而是返回插入的记录条数:显然,假如主键是你生成后插入的,自然你已经有主键了,显然不需要我们再去获得,所以我们这里处理的是当主键 ...
- mybatis插入数据并返回主键(oracle)
通常我们执行一个inser语句,即使有返回,也只是会返回影响了多少条数据 @insert("insert into t_user (id,name) values (suser.nextva ...
- mybatis 插入数据并返回主键值
<insert id="insert" parameterType="com.pojo.TSubject" useGeneratedKeys=" ...
随机推荐
- 【PL/SQL】设置F8自动运行
- json数据转换成结构体
package main import ( "encoding/json" "fmt" ) type IT1 struct { Company string ` ...
- git--配置文件、.gitignore
配置文件 git给我们提供了三种配置文件的方法,一种是项目配置文件,一种是全局配置文件,还有一种是系统配置文件. 在我们第一次使用git commit提交代码的时候,git让我们配置用户名和邮箱 全局 ...
- CF1178D Prime Graph
题目链接 题意 构造一张有\(n(3\le n\le 1000)\)个点的无向图(无重边和自环).满足: 边的总数为素数 所有点的度数均为素数 输出方案 solution 如果所有点的度数确定了.那么 ...
- 9.27 csp-s模拟测试53 u+v+w
T1 u 拿到题感觉他很水,但到死没想到正解,只会骗部分分(我太弱了) 考虑用两个差分数组维护,不同的是最后更新答案是$a[i][j]+=a[i-1][j-1]$,首先考虑在斜着加的起点,就是竖着的直 ...
- git pull --rebase的理解
在使用git的过程中经常需要使用到git pull命令,在更新远端代码的同时如果与本地代码产生冲突了, 那么冲突的文件中就出现了需要手动合并的部分,而git pull --rebase不同的地方则是当 ...
- 微信小程序跳转web-vie时提示appId无法读取:Cannot read property 'appId' of undefined
微信小程序报web-view错无法读取appId:Cannot read property 'appId' of undefined 问题描述: 我以前一直如下写代码没报错也都是可以使用的,并且小程序 ...
- 行为驱动:Cucumber + Java - 实现数据的参数化
1.什么是参数化 实际设计测试用例过程中,我们经常会用等价类.边界值这样的方法,针对一个功能进行测试数据上的测试,比如一个输入框,正向数据.逆向数据,非法输入等等 2.Cucumber的数据驱动 同上 ...
- Gin框架 - 数据绑定和验证
概述 上篇文章分享了 Gin 框架使用 Logrus 进行日志记录,这篇文章分享 Gin 框架的数据绑定与验证. 有读者咨询我一个问题,如何让框架的运行日志不输出控制台? 解决方案: engine : ...
- pandas使用大全--数据与处理
1.首先导入pandas库,一般都会用到numpy库,所以我们先导入备用: import numpy as np import pandas as pd 导入CSV或者xlsx文件: df = pd. ...