mybatisplus新增返回主键
时间: 2025-05-20 09:46:26 浏览: 20
### MyBatisPlus 插入数据时返回主键的方式
MyBatisPlus 是基于 MyBatis 的增强工具包,提供了更简洁的操作方式以及丰富的功能特性。对于插入操作后返回主键的功能,可以通过多种方式进行实现。
#### 配置全局主键策略
在 MyBatisPlus 中,可以配置 `id-type` 来指定主键生成策略[^4]。常见的主键生成策略有以下几种:
- **ASSIGN_ID**: 自动分配 ID,通常用于分布式场景下的唯一标识符生成。
- **AUTO**: 数据库自增主键,适用于 MySQL 等支持自增字段的数据库。
- **INPUT**: 手动输入主键值。
- **UUID**: 使用 UUID 作为主键值。
当使用 `ASSIGN_ID` 或者 `AUTO` 类型时,MyBatisPlus 可以自动获取并返回插入后的主键值。
#### Mapper 层方法调用
假设有一个实体类 `User`,其主键字段为 `id`,对应的 Mapper 接口继承了 `BaseMapper<User>`。此时可以直接调用 `insert` 方法完成插入操作,并通过对象反射机制将生成的主键赋值给实体对象中的 `id` 字段[^4]。
以下是具体代码示例:
```java
// 实体类定义
@Data
public class User {
@TableId(type = IdType.ASSIGN_ID)
private Long id;
private String name;
}
// Service层逻辑
@Autowired
private UserMapper userMapper;
public void addUser(User user) {
int result = userMapper.insert(user);
if (result > 0) {
System.out.println("新插入记录的主键:" + user.getId());
}
}
```
在此过程中,`userMapper.insert(user)` 不仅执行了插入操作,还会将生成的主键值回填到传入的对象实例中[^4]。
#### Oracle Sequence 支持
针对 Oracle 数据库,由于不支持自增字段,因此需要借助序列(Sequence)来生成主键。MyBatisPlus 提供了对 Oracle 序列的支持,在插入前先查询序列值并将其设置为主键值[^5]。
下面是一个典型的配置案例:
```xml
<insert id="insertWithSeq">
<selectKey keyProperty="id" resultType="long" order="BEFORE">
SELECT SEQ_USER.NEXTVAL FROM DUAL
</selectKey>
INSERT INTO USER(ID, NAME) VALUES(#{id}, #{name})
</insert>
```
此 XML 片段展示了如何利用 `<selectKey>` 元素提前获取序列值,并将其绑定至待插入对象的主键属性上[^1]。
---
### 总结
无论是通过内置的主键生成器还是外部依赖(如 Oracle Sequence),MyBatisPlus 均能有效处理插入操作后返回主键的需求。只需合理配置主键策略并与业务需求匹配即可达成目标。
阅读全文
相关推荐













