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=" ...
 
随机推荐
- 修改官方发行openstack镜像的cloud-init登录方式为账号密码登录
			
openstack使用的镜像多为qcow2格式,各个发行商也开源了针对openstack制作的镜像.但是这些镜像的登录方式都是注入用户名和密码的方式,就是说不能够直接通过账号和密码登录.那么如何将一个 ...
 - 第02组 Beta冲刺(2/5)
			
队名:無駄無駄 组长博客 作业博客 组员情况 张越洋 过去两天完成了哪些任务 数据库实践 提交记录(全组共用) 接下来的计划 加快校园百科的进度 还剩下哪些任务 学习软工的理论课 学习代码评估.测试 ...
 - Vue 学习记录(一)-创建项目
			
环境准备 node.js vue-cli 安装配置环境 1.下载node.js,使用默认配置安装 . 2.使用npm命令安装国内下载镜像(可选) cmd: npm install -g cnpm ...
 - C# 原子操作理解
			
C#内置提供的原子操作 Interlocked.Increment:以原子操作的形式递增指定变量的值并存储结果. Interlocked.Decrement:以原子操作的形式递减指定变量的值并存储结果 ...
 - 一段完整的创建表格的SQL代码
			
一段完整的创建表格的SQL代码 使用SQL语句创建一张表,不仅可以可以快速熟悉SQL语句,还可以从这看出一个人对该技能点的熟悉程度. 这里先说明几点: PRIMARY KEY:主键,一张表中只允许有一 ...
 - 微软宣布.NET Native预览版 C#可编译为本地机器码【转】
			
英文原文:Announcing .NET Native Preview 微软在 MSDN 博客上宣布了 .NET Native 的开发者预览版..NET Native 可以将 C# 代码编译成本地机器 ...
 - JVM的监控工具之jhat
			
在上一篇文件文章中讲到了jhap的用法:https://www.cnblogs.com/cheng21553516/p/11223615.html,既然jhap可以转储堆的快照文件, 那么用什么来分析 ...
 - 通信与io:io是通信的端点机制
			
通信与io:io是通信的端点机制: io可以是连接到文件系统的: 也可以是连接到对等端点的:
 - MySQL慢日志查询分析方法与工具
			
MySQL中的日志包括:错误日志.二进制日志.通用查询日志.慢查询日志等等.这里主要介绍下比较常用的两个功能:通用查询日志和慢查询日志. 1)通用查询日志:记录建立的客户端连接和执行的语句. 2)慢查 ...
 - golang中,slice的几个易混淆点
			
slice在golang中是最常用的类型,一般可以把它作为数组使用,但是比数组要高效呀.不过,我感觉这个东西用的不好坑太多了.还是需要了解下他底层的实现 slice的结构定义 type slice s ...