MyBatis 教程

MyBatis 笔记

Mybatis insert 插入操作返回自增的主键值

MyBatis insert 插入语句操作 MyBatis insert 插入语句操作


Mybatis 插入操作可以通过 insert 标签中添加 useGeneratedKeys 和 keyProperty 2 个配置来实现返回自增的主键值。在实际的开发中,插入数据库后往往需要得到自增 ID 值,然后使用这个值进行一些其他的操作。

配置方式

Mybatis 在插入数据时,往往通过 Java 对象形式传递要添加的数据,

配置示例如下:

<sql id="tableName">
  user
</sql>

<insert id="save" useGeneratedKeys="true" keyProperty="id">
  INSERT INTO
  <include refid="tableName"/>
  (
    user_name, user_email
  )
  VALUES
  ( #{userName}, #{userEmail} )
</insert>

核心点是在 insert 标签上配置了如下 2 个属性:

useGeneratedKeys="true"
keyProperty="id"
useGeneratedKeys
(仅对 insert 和 update 有用)MyBatis 会使用 JDBC 的 getGeneratedKeys 方法来取出数据库内部生成的主键(比如:像 MySQL 和 SQL Server 这样的关系数据库管理系统的自动递增字段),默认值为 false
keyProperty
(仅对 insert 和 update 有用)唯一标记一个属性,MyBatis 会通过 ResultSet.getGeneratedKeys 的返回值后将其赋值给 keyProperty 配置的 id 属性,默认:unset。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表,这种情况下通常还需要设置 keyColumn 属性,按顺序指定数据库的列,这里列的值会和 keyProperty 配置的属性一一对应。