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应用必不可少的技术