Mybatis在插入单条数据的时候有两种方式返回自增主键:

1、对于支持生成自增主键的数据库:增加 useGenerateKeys和keyProperty ,<insert>标签属性。

2、不支持生成自增主键的数据库:使用<selectKey>标签。

对于批量插入数据返回自增主键的解决方式,Mybatis官网资料介绍如下:

First, if your database supports auto-generated key fields (e.g. MySQL and SQL Server), then you can simply set useGeneratedKeys=“true” and set the keyProperty to the target property and you’re done. For example, if the Authortable above had used an auto-generated column type for the id, the statement would be modified as follows:

<insert id="insertAuthor" useGeneratedKeys="true" keyProperty="id">
    insert into Author (username,password,email,bio)
    values (#{username},#{password},#{email},#{bio})
</insert>

If your database also supports multi-row insert, you can pass a list or an array of Authors and retrieve the auto-generated keys.

<insert id="insertAuthor" useGeneratedKeys="true" keyProperty="id">
  insert into Author (username, password, email, bio) values
  <foreach item="item" collection="list" separator=",">
    (#{item.username}, #{item.password}, #{item.email}, #{item.bio})
  </foreach>
</insert>

从官网资料可以看出Mybatis是支持批量插入时返回自增主键的。

但是在开发过程中如果遇到返回自增id失效情况,可以从以下方面排查问题:

1、Mybatis版本至少3.3.1以上。

2、在Mapper文件中,方法参数不能使用@Param注解。

3、Mapper.xml文件中,<insert>标签上指定参数类型(parameterType=“java.util.List”),设置useGeneratedKeys=“true”,keyProperty=“id”(list中元素的主键)。

更多推荐

mybatis批量插入后返回主键id