zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    电商网站秒杀与抢购的系统架构[转]
    解决sublime无法安装软件的问题
    oracel中decode的使用
    使用Spring进行远程访问与Web服务[转]
    解决maven传递依赖中的版本冲突
    Linux下rz,sz
    spring bean 使用继承
    Java14-ListIterator
    Java13-Iterator的应用
    Java11-ArrayList常用的方法
  • 原文地址:https://www.cnblogs.com/zj68/p/12942469.html
Copyright © 2011-2022 走看看