mybatisplus 获得新增id

在使用 MyBatis-Plus 进行数据库操作时,如果你在插入记录后需要获取新插入记录的ID,可以通过几种方式实现。MyBatis-Plus 提供了一些内置的方法来帮助你获取插入记录的ID。以下是一些常见的方法:

  1. 使用 `insert` 方法并返回自增主键

如果你的表设计中有自增主键,你可以直接插入记录,然后使用 `insert` 方法,它会返回自增的主键ID。

```java

// 假设有一个实体类 User,其中有一个自增的主键 id

User user = new User();

user.setName("张三");

user.setAge(30);

// 使用 insert 方法插入数据,并获取自增主键

int insertResult = userMapper.insert(user);

if (insertResult > 0) {

// 获取自增主键

Integer id = user.getId(); // 这里可以直接获取到插入后的ID

System.out.println("插入成功,ID: " + id);

}

```

  1. 使用 `save` 方法并返回自增主键

MyBatis-Plus 的 `save` 方法也可以用来插入数据,并返回自增的主键ID。

```java

User user = new User();

user.setName("李四");

user.setAge(25);

boolean result = userMapper.save(user);

if (result) {

Integer id = user.getId(); // 直接从实体中获取自增主键ID

System.out.println("插入成功,ID: " + id);

}

```

  1. 使用 `insert` 方法并指定返回字段

如果你不想通过实体类自动填充自增ID,或者你的表没有自增主键,你可以在插入时指定返回字段。例如:

```java

Map<String, Object> param = new HashMap<>();

param.put("name", "王五");

param.put("age", 28);

// 使用 XML Mapper 或 @Select 注解的 SQL 语句插入数据,并返回特定的字段(例如自定义的ID)

Integer id = userMapper.insertReturnId(param); // 这里的 insertReturnId 是自定义的方法名,需要在 Mapper XML 中定义或使用 @Select 注解定义 SQL 语句。

System.out.println("插入成功,ID: " + id);

```

在 Mapper XML 中定义的方法示例:

```xml

<insert id="insertReturnId" parameterType="map" useGeneratedKeys="true" keyProperty="id">

INSERT INTO user (name, age) VALUES ({name}, {age})

</insert>

```

  1. 使用 `useGeneratedKeys` 和 `keyProperty` 属性

当你使用 MyBatis 的 XML Mapper 文件时,可以在 `<insert>` 标签中添加 `useGeneratedKeys="true"` 和 `keyProperty="id"` 属性来指定返回的字段。这同样适用于 MyBatis-Plus。例如:

```xml

<insert id="insertUser" parameterType="com.example.User" useGeneratedKeys="true" keyProperty="id">

INSERT INTO user (name, age) VALUES ({name}, {age})

</insert>

```

然后在你的服务层调用这个方法:

```java

User user = new User();

user.setName("赵六");

user.setAge(32);

userMapper.insertUser(user); // 插入后,user 对象的 id 将被自动填充。

System.out.println("插入成功,ID: " + user.getId());

```

以上方法可以帮助你在使用 MyBatis-Plus 时获取插入记录的自增ID。选择最适合你场景的方法即可。

相关推荐
毕设源码-钟学长4 分钟前
【开题答辩全过程】以 基于Java的医药进出口交易系统设计与实现为例,包含答辩的问题和答案
java·开发语言
Touch&4 分钟前
Windows11多个JDK版本(Java8、Java11、Java17、Java21)下载安装和切换
java·jdk·jdk多个版本切换
清水白石0088 分钟前
Python 性能优化全景解析:当 Big O 骗了你——深挖常数开销、内存与解释器黑盒
开发语言·python·性能优化
oi..11 分钟前
python Get/Post请求练习
开发语言·经验分享·笔记·python·程序人生·安全·网络安全
星夜夏空9913 分钟前
C语言进阶项目——搭建内存池
c语言·开发语言
帮我吧智能服务平台13 分钟前
装备制造企业售后服务数字化:从成本中心到利润中心背景
java·前端·制造
历程里程碑15 分钟前
Proto3 三大高级类型:Any、Oneof、Map 灵活解决复杂业务场景
java·大数据·开发语言·数据结构·elasticsearch·链表·搜索引擎
蜜獾云16 分钟前
DDD 架构分层,MQ消息要放到那一层处理?
java·jvm·架构
夫礼者19 分钟前
【极简监控】核弹级排障利器:仿 Jenkins Script Console 打造免重启诊断“黑科技”
java·jenkins·监控·排错
小杍随笔21 分钟前
【Rust Exercism 练习详解:Anagram + Space Age + Sublist(附完整代码与深度解读)】
开发语言·rust·c#