mybatisPlus-主键生成策略

承接:mybatisPlus-插入测试

分布式系统唯一ID生成方案汇总:分布式系统唯一ID生成方案汇总

1 雪花算法

snowflake是Twitter开源的分布式ID生成算法,结果是一个long型的ID。其核心思想是:使用41bit作为毫秒数,10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID),12bit作为毫秒内的流水号(意味着每个节点在每毫秒可以产生 4096 个 ID),最后还有一个符号位,永远是0。可以保证几乎全球唯一!

2 主键自增测试

在User实体类字段上 加 @TableId(type = IdType.AUTO)注解

src/main/java/com/lv/mybatis_plus/pojo/User.java

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
//对应数据库的主键(uuid,自增id,雪花算法,redis,zookeeper!)
@TableId(type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
private String email;
}

修改数据库id字段一定要自动递增

再次运行测试类中的插入方法,然后查看数据库新增字段

id字段实现了自增

3 手动输入主键测试

修改User实体类的 @TableId(type = IdType.INPUT)注解

src/main/java/com/lv/mybatis_plus/pojo/User.java

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
//对应数据库的主键(uuid,自增id,雪花算法,redis,zookeeper!)
@TableId(type = IdType.INPUT) //一旦手动输入id之后,就需要自己写id了
private Long id;
private String name;
private Integer age;
private String email;
}

此时运行插入测试方法,查看控制台日志

可以看出id为null,我们没有给id传值,此时查看一下数据库

因为我们给数据库中的主键设置自动递增了,所有数据还是插入进去了,那么接下来我们修改一个测试类,给id传入一个值再测试一次

src/test/java/com/lv/mybatis_plus/MybatisPlusApplicationTests.java

//测试插入
@Test
public void testInsert(){
User user = new User();
user.setId(9527L);//传入一个Long类型的id
user.setName("星露谷");
user.setAge(8);
user.setEmail("1148397597@qq.com");
int result = userMapper.insert(user); // mybatis-plus会帮我们自动生成id
System.out.println(result); //受影响的行数
System.out.println(user); //发现,id会自动回填
}

运行插入方法,查看控制台和数据库

数据插入成功

4 所有主键生成策略

只需要修改实体类上@TableId(type = ???)注解 中的type值即可,默认 ID_WORKER 全局唯一的id

AUTO(0), //数据库id自增
NONE(1), //未设置主键
INPUT(2), //手动输入
ID_WORKER(3), //默认的全局唯一id
UUID(4), //全局唯一uuid
ID_WORKER_STR(5); //ID_WORKER 的字符串表示法

 其它策略这里就不再测试了

相关博文:
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示