mybatisplus entity的 id 不使用数据库的自增id,该怎么设置
时间: 2024-11-10 15:26:53 浏览: 15
MybatisPlus中插入数据后获取该对象主键值的实现
5星 · 资源好评率100%
在MyBatisPlus中,如果你想为Entity(实体类)的ID字段设置非自动增长(比如手动分配的UUID、时间戳或者其他形式),你可以按照以下步骤操作:
1. 首先,确保你的实体类中`@TableId`注解对应的属性不是`String`类型,因为通常`String`会被认为是非自增ID。如果不是,将其改为`Long`、`Integer`、`UUID`等类型的字段。
```java
@TableId(value = "custom_id", type = IdType.AUTO) // 如果不想用数据库默认的自增ID
private Long customId;
```
这里的`type = IdType.AUTO`可以改为`IdType.ID_WORKER`, 表示由你自己生成的ID。
2. 确保你在MyBatisPlus全局配置文件(GlobalConfig.java 或 application.yml)中设置了正确的ID生成策略。例如,如果你选择的是自定义生成的策略,可以配置为`IdGeneratorCustom`。
```java
// GlobalConfig.java 或 application.yml
mybatis-plus:
global-config:
db-config:
id-generator-strategy: ID_WORKER
```
3. 实现`com.baomidou.mybatisplus.core.increment.DefaultIdWorker`接口,并提供你需要的ID生成逻辑。你可以创建一个工具类来生成唯一标识,然后在服务层传入这个工具类实例给`BaseService`的构造函数。
```java
@Component
public class CustomIdGenerator implements DefaultIdWorker {
// 自定义ID生成逻辑...
}
@Service
public class YourService extends BaseService<YourEntity, CustomIdGenerator> {
public YourService() {
super(customIdGenerator);
}
}
```
这样,每次创建新记录时,就会使用你在`CustomIdGenerator`中定义的规则来生成ID了。记得在实际应用中要确保生成的ID是唯一的。
阅读全文