MyBatis insert 的同时返回对应的行id

如何使用?

1
2
3
<insert id-"xx" paramType="xx.xx.xx" resultType="yy.yy.yy" useGeneratedKeys="true" keyProperty="id">
-- SQL --
</insert>

useGeneratedKeys=”true” keyProperty=”id” : 添加这部分代码(属性),即可令MyBatis insert 返回id而不是插入的数量

注意点:

  1. useGeneratedKeys="true"keyProperty="id"这两个属性通常在MyBatis或类似的ORM框架中用于插入(INSERT)操作,当执行插入操作时,这些属性用于获取数据库自动生成的主键并将其赋值回对象的id属性。

  2. 在执行删除(DELETE)操作时,这些属性不适用。删除操作通常返回的是受影响的行数,即被删除的记录数量。在MyBatis中,删除操作的返回值通常是一个整数,表示成功删除的记录数。

  3. 更新(UPDATE)操作在使用useGeneratedKeys="true"keyProperty="id"时也不会返回ID。这些属性用于在插入(INSERT)操作后获取自动生成的主键。在更新操作中,这些属性没有作用,因为更新操作不会生成新的键值。更新操作通常返回的是受影响的行数,即数据库中被更新的记录数。在MyBatis或其他ORM框架中,更新操作的返回值通常是一个整数,表示成功更新的记录数。

  4. 如果 insert …… on duplicate key update,会返回id吗?

在使用INSERT ... ON DUPLICATE KEY UPDATE语句时,如果发生了插入(即之前没有重复的键),那么会返回新插入行的ID。如果是更新现有行(因为遇到了重复的键),行为取决于所使用的数据库和ORM框架。

对于MySQL来说:

  • 如果插入了新行,则返回新行的ID。
  • 如果更新了现有行,并且没有改变自增ID,则返回0。
  • 如果更新了现有行,并且同时改变了自增ID(这是不常见的),则返回新的ID。
  1. 在MyBatis中,如果你设置了useGeneratedKeys="true"keyProperty="id",并且是插入新行,你可以获取到新生成的ID。但如果是更新操作,MyBatis并不会默认返回这个ID。你可能需要额外的配置或查询来获取这个值,如果它对你的应用程序来说是必要的。