MyBatis —— 返回主键值

叁歲伎倆 2022-10-01 12:57 231阅读 0赞

目录

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

2、使用 selectKey 返回主键的值


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

Mapper.xml 伪代码:

  1. <insert id="insert" useGeneratedKeys="true" keyProperty="id">
  2. insert语句
  3. </insert>

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

2、使用 selectKey 返回主键的值

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

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

  1. <insert id="insert">
  2. insert 语句
  3. <selectKey keyColumn="id" resultType="long" keyProperty="id" order="AFTER">
  4. SELECT LAST_INSERT_ID()
  5. </selectKey>
  6. </insert>

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

  1. <insert id="insert">
  2. <selectKey keyColumn="id" resultType="long" keyProperty="id" order="BEFORE">
  3. SELECT SEQ_ID.nextval from dual
  4. </selectKey>
  5. insert 语句
  6. </insert>

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

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

发表评论

表情:
评论列表 (有 0 条评论,231人围观)

还没有评论,来说两句吧...

相关阅读