mybatisplus 主键返回
时间: 2025-05-17 12:37:21 浏览: 23
### MyBatis-Plus 插入数据后返回主键的配置方法
在使用 MyBatis-Plus 进行数据插入操作时,可以通过多种方式来确保插入成功后能够自动返回生成的主键值。以下是几种常见的方式及其对应的代码示例。
#### 方法一:通过 `useGeneratedKeys` 和 `keyProperty` 配置
可以在 XML 映射文件中设置 `<insert>` 节点的相关属性,从而实现插入后返回主键的功能。具体来说:
- 设置 `useGeneratedKeys="true"` 表明启用 JDBC 的自动生成主键功能。
- 使用 `keyProperty` 属性指定实体类中的哪个字段用于接收生成的主键值。
```xml
<insert id="saveReturnPK" parameterType="com.lichee.domain.Student" useGeneratedKeys="true" keyProperty="studentId">
INSERT INTO student_info(name, age) VALUES (#{name}, #{age})
</insert>
```
上述代码片段展示了如何利用 `useGeneratedKeys` 和 `keyProperty` 来完成主键返回的操作[^2]。
---
#### 方法二:基于注解的方式
如果项目更倾向于采用注解驱动开发,则可以借助 MyBatis-Plus 提供的注解机制来简化配置过程。例如,在实体类上定义主键字段时,可加入如下注解:
- 对于 MySQL 数据库,默认情况下会使用自增策略(AUTO_INCREMENT),此时只需标注 `@TableId(type = IdType.AUTO)` 即可。
```java
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.IdType;
public class Student {
@TableId(type = IdType.AUTO)
private Long studentId;
// Getter and Setter methods...
}
```
此段代码表明当执行保存逻辑时,框架会依据数据库表结构自动填充该对象实例的 `studentId` 值[^1]。
对于其他类型的数据库(如 Oracle 或 PostgreSQL),可能还需要额外提供序列支持或者 UUID 类型作为唯一标识符来源。这时可以选择手动赋值模式 (`IdType.INPUT`) 并配合业务层处理传参问题[^4]。
---
#### 方法三:程序化控制事务提交并验证结果
除了以上两种静态声明式的解决方案外,还可以编写一段封装好的 DAO 接口调用函数以动态捕获新记录 ID 。下面是一个简单的例子演示了整个流程:
```java
@Service
public class StudentService {
@Autowired
private SqlSession sqlSession;
public int insertStudentAndGetId(Student student){
try{
int resultCount = sqlSession.insert("insertStudentCacheId", student);
sqlSession.commit();
if(resultCount > 0 && null != student.getStudentId()){
System.out.println("Inserted successfully with generated PK:" + student.getStudentId());
}
return resultCount;
} finally {
if(null != sqlSession){
sqlSession.close();
}
}
}
}
```
这里的关键在于确认 `student` 实体对象内部已经更新了最新的主键信息后再做进一步判断或打印日志输出[^3]。
---
### 总结
综上所述,MyBatis-Plus 支持多样的插件扩展以及灵活易用的设计理念使得开发者可以根据实际需求选取最适合自己的方案去解决类似场景下的技术难题。无论是基础版还是高级定制版本都能满足日常工作中遇到的各种挑战!
阅读全文
相关推荐



















