首页 技术 正文
技术 2022年11月19日
0 收藏 884 点赞 4,840 浏览 2252 个字

MyBatis 插入记录同时获取主键

MyBatis 插入记录同时获取主键的系统界面

useGeneratedKeys 属性

keyProperty 属性

keyColumn 属性

selectKey 元素

注意点: 获取的主键的主键被设置到对象的属性中,而不是当作返回值。
  1. 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>
  1. 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

DB2VALUES IDENTITY_VAL_LOCAL()

MYSQLSELECT LAST_INSERT_ID()

SQLSERVERSELECT SCOPE_IDENTITY()

CLOUDSCAPEVALUES IDENTITY_VAL_LOCAL()

DERBYVALUES IDENTITY_VAL_LOCAL()

HSQLDBCALL IDENTITY()

SYBASESELECT @@IDENTITY

DB2_MFSELECT IDENTITY_VAL_LOCAL() FROM SYSIBM.SYSDUMMY1

INFORMIXselect dbinfo(‘sqlca.sqlerrd1’) from systables where tabid=1

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,028
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,518
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,367
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,146
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,781
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,859