@TableId( value = "id", type = IdType.ASSIGN_ID)雪花算法生成id
时间: 2025-06-28 15:16:37 浏览: 12
### MyBatis Plus 中使用雪花算法生成 ID 的方法及配置
在 MyBatis Plus 中,可以通过 `@TableId` 注解配合 `IdType.ASSIGN_ID` 来实现基于雪花算法的全局唯一 ID 生成。这种方式能够确保分布式环境下的主键不冲突。
#### 实体类定义
实体类中的主键字段可以如下定义:
```java
@Data
@TableName("tbl_user")
public class User {
@TableId(type = IdType.ASSIGN_ID)
private Long id;
private String name;
@TableField(value="pwd", select=false)
private String password;
private Integer age;
private String tel;
@TableField(exist=false)
private Integer online;
}
```
此代码片段展示了如何利用 `@TableId` 和 `type=IdType.ASSIGN_ID` 设置主键自动生成方式为雪花算法[^3]。
#### 配置文件调整
对于某些场景可能还需要进一步微调,默认情况下不需要额外配置 workerId 或 dataCenterId 参数,因为默认实现了自动分配机制。但如果确实有需求,则可以在 application.yml 文件里加入相应属性:
```yaml
spring:
datasource:
url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
username: root
password: 123456
mybatis-plus:
global-config:
db-config:
id-type: assign_id
```
这段 YAML 配置指定了数据库连接信息以及 MyBatis Plus 的全局配置项,其中包含了用于启用 ASSIGN_ID 类型作为默认 ID 生产模式的选择[^1]。
当应用程序启动时会读取这些设置并应用到所有映射对象上,从而使得新记录插入表中时能获得由雪花算法产生的唯一标识符。
#### 插入操作测试
为了验证上述配置是否生效,在业务逻辑层编写简单的新增接口即可完成初步检验工作:
```java
@Service
public class UserServiceImpl implements IService<User> {
@Autowired
private UserMapper userMapper;
@Override
public boolean save(User entity) {
int result = userMapper.insert(entity);
return result > 0 ? true : false;
}
}
```
只要成功执行保存动作后查看对应数据表里的最新一条记录,应该可以看到其 ID 字段已经被赋予了一个类似于 “7984723984723L” 这样的大整数值,这便是通过雪花算法计算出来的结果[^2]。
阅读全文
相关推荐



















