码迷,mamicode.com
首页 > 其他好文 > 详细

selectKey在mybai中的使用

时间:2020-05-23 18:13:50      阅读:62      评论:0      收藏:0      [点我收藏+]

标签:执行   mat   ane   结果类型   ons   服务器   before   ref   key   

 

项目中,通过mybatis对数据库进行insert插入数据库时,一般成功插入后返回int类型的插入数据条数(一般为1),但是有时候需要这新增数据的主键,以便后续其他数据需要使用,若是再重新查数据库,效率变低了

可以使用selectKey,mybatis可以将insert的数据的主键返回,直接拿到新增数据的主键

当然也可以使用<insert id="insert" parameterType="xx" useGeneratedKeys="true" keyProperty="id">

 

<insert id="insertAndgetkey" >

  <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">

    SELECT LAST_INSERT_ID() 

  </selectKey>

  insert into ......

</insert>

 

selectKey会将 SELECT LAST_INSERT_ID()的结果放入到传入的 table主键对应的POJO属性里面,

keyProperty 对应的table中的主键的对应的属性名,

order="AFTER"表示 SELECT LAST_INSERT_ID() 在insert执行之后执行,多用在主键自增

order="BEFORE "表示 SELECT LAST_INSERT_ID() 在insert执行之前执行,这种适合那种主键不是自增的类型

resultType指定 SELECTLAST_INSERT_ID() 的结果类型

 

SELECT LAST_INSERT_ID() 即为获取最后插入的ID值,也就是将插入table数据的主键返回到 POJO 对象中

如果没有参数,则LAST_INSERT_ID()返回一个BIGINT UNSIGNED(64位)值,表示AUTO_INCREMENT由于最近执行的INSERT语句而成功为列添加的第一个自动生成的值。LAST_INSERT_ID()如果没有成功插入行,则值保持不变。

如果前一个语句返回错误,则值为 LAST_INSERT_ID()undefined。对于事务表,如果语句由于错误而回滚,则值为 LAST_INSERT_ID()undefined。对于手动 ROLLBACK,其值LAST_INSERT_ID() 不会恢复到事务之前的值; 它仍然保持原样 ROLLBACK。

如果将一行的AUTO_INCREMENT列设置为非“magic”值(即非NULL且非0的值),则LAST_INSERT_ID()的值不会改变。

如果使用一条insert语句插入多行,LAST_INSERT_ID()只返回为第一个插入的行生成的值。这样做的原因是可以在其他服务器上轻松复制相同的INSERT语句。

--------------------------------------------------------------------------

mysql> USE test;

mysql> CREATE TABLE t (
id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
name VARCHAR(10) NOT NULL
);

mysql> INSERT INTO t VALUES (NULL, ‘Bob‘);

mysql> SELECT * FROM t;
+----+------+
| id | name |
+----+------+
| 1 | Bob |
+----+------+

mysql> SELECT LAST_INSERT_ID();
+------------------+
| LAST_INSERT_ID() |
+------------------+
| 1 |
+------------------+

mysql> INSERT INTO t VALUES
(NULL, ‘Mary‘), (NULL, ‘Jane‘), (NULL, ‘Lisa‘);

mysql> SELECT * FROM t;
+----+------+
| id | name |
+----+------+
| 1 | Bob |
| 2 | Mary |
| 3 | Jane |
| 4 | Lisa |
+----+------+

mysql> SELECT LAST_INSERT_ID();
+------------------+
| LAST_INSERT_ID() |
+------------------+
| 2 |
+------------------+

--------------------------------------------------------------------------------

尽管第二个INSERT语句将三个新行插入到t中,但是为第一行生成的ID是2,并且LAST_INSERT_ID()为下面的SELECT语句返回了这个值。

 

参考:https://blog.csdn.net/Soinice/article/details/88845898

mysql API https://dev.mysql.com/doc/refman/5.7/en/information-functions.html#function_last-insert-id

selectKey在mybai中的使用

标签:执行   mat   ane   结果类型   ons   服务器   before   ref   key   

原文地址:https://www.cnblogs.com/zj68/p/12942469.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!