mybatisplus 的ASSIGN_UUID,生成带中划线的id,springboot
时间: 2024-11-05 07:24:50 浏览: 96
MybatisPlus是一个基于MyBatis的持久层框架增强工具,它提供了一些方便的API和注解,可以简化数据映射操作。其中`ASSIGN_UUID`通常用于自动生成主键,当你希望数据库ID为UUID格式,且包含下划线分隔的字符串时,你可以使用这个特性。
当你在创建实体类并标注`@TableId(value = "id", type = IdType.AUTO)`(默认主键类型为雪花ID,如果需要UUID类型),然后使用`@TableField(fill = FieldFill.ASSIGN_UUID)`,MybatisPlus会在插入新记录时自动为该字段生成一个UUID格式的值。Spring Boot集成MybatisPlus时,只需要添加依赖并配置一下MybatisPlus的环境即可。
例如,在SpringBoot的启动类上加上@EnableGlobalConfiguration启用全局配置,并在application.properties文件中配置数据源:
```properties
mybatis-plus.global-config.sql-executor-type=MySQL
```
这样,每次保存对象到数据库时,对应的`id`字段就会自动设置为带有下划线的UUID了。
相关问题
mybatisplus ASSIGN_UUID
### MyBatisPlus 中 ASSIGN_UUID 的使用方法
在 MyBatisPlus 中,`ASSIGN_UUID` 是一种用于自动分配唯一标识符(UUID)给主键字段的策略。这种方式特别适用于分布式系统或多实例部署场景下确保主键不冲突。
#### 配置 `ASSIGN_UUID`
为了启用 `ASSIGN_UUID` 主键生成策略,在项目的全局配置文件中设置如下参数:
```yaml
mybatis-plus:
global-config:
db-config:
id-type: assign_uuid
```
此配置项告知框架每当创建新记录时自动生成 UUID 并赋值给对应的 ID 字段[^1]。
#### 实体类定义
当采用 `ASSIGN_UUID` 方式时,建议实体对象中的主键属性声明为字符串类型 (`String`) 来存储完整的 UUID 值。下面是一个简单的 Java 类例子展示如何应用该特性:
```java
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
public class User {
@TableId(type = IdType.ASSIGN_UUID)
private String userId; // 使用String类型来保存UUID
// other fields, getters and setters...
}
```
上述代码片段展示了通过 `@TableId` 注解指定了 `userId` 属性应由 MyBatisPlus 自动生成 UUID 赋予初始值[^3]。
#### 插入数据测试
可以编写一段简单的单元测试验证这一机制的有效性:
```java
@Test
void testInsertWithAssignUUID() {
User user = new User();
// 不需要手动设定userId,它会在插入数据库前被自动填充
int result = userService.save(user);
System.out.println("Generated UserId:" + user.getUserId());
Assertions.assertTrue(result > 0 && StringUtils.isNotBlank(user.getUserId()));
}
```
这段 JUnit 测试案例尝试向数据库新增一条用户记录而不显式提供 `userId` 参数;执行完毕后会打印出程序内部产生的唯一识别码并确认操作成功完成。
重写mybatisplus 的ASSIGN_UUID,生成带中划线的id
MyBatisPlus 是一个基于 MyBatis 的代码生成工具,它提供了一些便捷的方法来简化数据库操作。如果想在插入数据时自动生成带有下划线的 UUID ID,可以重写 `BaseEntity` 中的 `assignID` 方法,利用 `UUID.randomUUID().toString().replace("-", "_")` 这样的方式生成。
首先,找到你在项目中使用的 `BaseEntity` 或者其继承自的通用实体类,例如 `GlobalMapper` 提供的 `BaseEntity`。然后,在这个类中加入如下代码:
```java
@Override
protected void assignID() {
this.id = UUID.randomUUID().toString().replace("-", "_"); // 生成新的 ID,替换掉 -
}
```
这将覆盖默认的 UUID 生成并将其转换为你需要的格式。记得在启用全局序列化设置 (`@TableId GlobalIdGenerator(idType = IdType.AUTO)` 或者相应的全局配置) 后,才能让这个方法生效。
阅读全文
相关推荐
















