mybatis执行insert返回id实现详解
在 MyBatis 中,执行 INSERT 操作后默认返回的是影响的行数(通常是 1),而不是插入的主键 ID。但可以通过以下配置获取新插入记录的 ID:
🛠 两种方式获取自增 ID:
1. useGeneratedKeys+keyProperty(推荐)
适用于支持自增主键的数据库(如 MySQL、SQL Server 等)。在 Mapper XML 中配置:
<insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
INSERT INTO user (name, email)
VALUES (#{name}, #{email})
</insert>-
useGeneratedKeys="true":启用数据库自动生成的 ID。 -
keyProperty="id":将生成的 ID 赋值给参数对象的id属性。
调用示例:
User user = new User();
user.setName("John");
user.setEmail("john@example.com");
int rows = userMapper.insertUser(user); // rows 是受影响行数
Long generatedId = user.getId(); // 获取插入的 ID ✅2. <selectKey>(适用于 Oracle 或复杂场景)
对于 Oracle 或需要自定义查询 ID 的情况:
<insert id="insertUser">
<selectKey keyProperty="id" resultType="long" order="AFTER">
SELECT LAST_INSERT_ID() <!-- MySQL 获取最新 ID -->
<!-- Oracle: SELECT your_sequence.CURRVAL FROM dual -->
</selectKey>
INSERT INTO user (name, email)
VALUES (#{name}, #{email})
</insert>order="AFTER":执行 INSERT 后再获取 ID(Oracle 可能需要BEFORE)。
📝 关键点总结:
| 特性 | 说明 |
|---|---|
| 默认返回值 | 受影响行数(Integer),不是 ID! |
| 获取 ID 的方式 | 通过 keyProperty 将 ID 注入到参数对象中(如 user.getId()) |
| 支持数据库 | MySQL、SQL Server 等(useGeneratedKeys) / Oracle(<selectKey>) |
| 注解配置 | 使用 @Options(useGeneratedKeys=true, keyProperty="id") |
💡 示例(注解方式):
@Options(useGeneratedKeys = true, keyProperty = "id")
@Insert("INSERT INTO user(name, email) VALUES (#{name}, #{email})")
int insertUser(User user); // 执行后 user.id 即为新生成的 ID⚠️ 注意:
- 确保数据库表的主键是自增(AUTO_INCREMENT) 或配置了序列。
keyProperty的值必须与实体类中的属性名严格匹配(如id对应user.id)。
通过正确配置,MyBatis 可以无缝地将新生成的 ID 注入到您的实体对象中,无需额外查询!
到此这篇关于mybatis执行insert如何返回id的实现的文章就介绍到这了,更多相关mybatis insert返回id内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Spring事件监听器之@EventListener原理分析
这篇文章主要介绍了Spring事件监听器之@EventListener原理分析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-12-12
SpringBoot RESTful 应用中的异常处理梳理小结
这篇文章主要介绍了SpringBoot RESTful 应用中的异常处理梳理小结,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-05-05
2020最新IDEA SpringBoot整合Dubbo的实现(zookeeper版)
这篇文章主要介绍了2020最新IDEA SpringBoot整合Dubbo(zookeeper版),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-09-09


最新评论