ibatis selectkey返回值在spring中怎么取

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ibatis selectkey返回值在spring中怎么取相关的知识,希望对你有一定的参考价值。

<insert ...>
<selectKey resultType="int" keyProperty="id">
SELECT LAST_INSERT_ID() as clientid
</selectKey>
insert ...

</insert ...>
这个返回值clientid在java里怎么取? 我用的是struts2+spring+ibatis

参考技术A 这条语句写在<insert></insert>里面,ibatis的insert本身就返回id的,你只要在写DAO的时候直接返回就可以了本回答被提问者采纳

selectKey在mybai中的使用

 

项目中,通过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

以上是关于ibatis selectkey返回值在spring中怎么取的主要内容,如果未能解决你的问题,请参考以下文章

ibatis insert 如何返回 int

MyBatis中使用注解进行selectKey的查询

Mybatis/Ibatis,数据库操作的返回值

mybatis 返回值

mybatis insert 如何返回主键

MyBatis insert/delete/update 的返回值