MyBatis —— 返回主键值

目录

1、使用 JDBC 方式返回主键自增的值

2、使用 selectKey 返回主键的值


1、使用 JDBC 方式返回主键自增的值

Mapper.xml 伪代码:


insert语句

useGeneratedKeys 设置为true后,MyBatis 会使用 JDBC的getGeneratedKeys 方法来取出由数据库内部生成的主键。获取主键值后将其赋值给 keyProperty 配置的 id 属性。

2、使用 selectKey 返回主键的值

有些数据库(如 Oracle)不提供主键自增的功能,而是使用序列得到一个值,然后将这个值赋给 id,再将数据插入数据库。这种情况可以是 标签来获取主键的值,这种方式不仅适用于不提供主键自增功能的数据库,也适用于提供主键自增功能的数据库。

MySQL 数据库对应Mapper.xml 伪代码:


    insert 语句
    
        SELECT LAST_INSERT_ID()
    

Oracle 数据库对应 Mapper.xml 伪代码:


    
        SELECT SEQ_ID.nextval from dual
    
    insert 语句

可以发现 selectKey 元素的位置不一样,位置不一样其实不会影响 selectKey 中的方法 在 insert 前面或者后面执行的顺序,影响执行顺序的是 order 属性。

  • MySQL 是先插入数据才能获取自增主键,所以selectKey在insert后执行,order属性为 AFTER。
  • Oracle 是先从序列中取出主键值然后插入到数据库中,所以 selectKey 在 insert 前执行,order 属性为 BEFORE。

你可能感兴趣的:(MyBatis)