uuid:UUID(Universally Unique Identifier,通用唯一识别码)是一种软件建构的标准,用于在分布式计算环境中为元素提供唯一的标识信息。UUID共占128位,分为五段,它具有唯一性、全局性、不变性等特点。
uuid生成主键,需要将testId改成String类型 而在数据库建表的时候testId 不能用bigint了 而是用char(32)就可以了 生成的uuid是这样的 c37da8074d52022661db24bf931990af 32个字符,这个16进制写法,展开就是128比特位了
0
到 2^64 - 1
)雪花算法(Snowflake):是一种分布式唯一ID生成算法,用于生成全局唯一的ID。它的设计目标是在分布式系统中生成ID,保证ID的唯一性、有序性和趋势递增。雪花算法的核心思想是将一个64位的ID分成多个部分,分别表示不同的信息。
1bit:代表是正数,永远为零 41bit:时间戳
10bit:机器标识:
12bit:序列号
用雪花算法生成的主键。 java中可以用long型表示 数据库建表用bigint 就像下面这样 1908852570512781314 这是一个用十进制表示的数字
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3.1</version>
</dependency>
//用来指定主键生成策略,使用雪花算法private Long userId;
//主键 不再使用auto_increment
package com.qyy.system.domain.sysuser;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.qyy.common.core.domain.BaseEntity;
import lombok.*;
import static com.baomidou.mybatisplus.extension.toolkit.Db.save;
@TableName("tb_sys_user")//用来指定表名
@Data // 包含@Getter、@Setter、@ToString、@EqualsAndHashCode、@RequiredArgsConstructor
@NoArgsConstructor // 生成无参构造方法
//用来自动生成getter/setter/toString/equals/hashCode等方法
public class SysUser extends BaseEntity {
@TableId(type = IdType.ASSIGN_ID)//用来指定主键生成策略,使用雪花算法
private Long userId; //主键 不再使用auto_increment
private String userAccount;//账号
private String password;//密码
private String nickName;//昵称
public static void main(String[] args) {
SysUser sysUser = new SysUser();
sysUser.setUserAccount("123");
System.out.println(sysUser.getUserAccount());
System.out.println(sysUser);
save(sysUser);
System.out.println(sysUser);
}
}
第一行输出:
123
(因为通过 setUserAccount("123") 给 userAccount 赋值后,getUserAccount() 直接返回该值) 第二行输出(示例):
SysUser(userId=null, userAccount=123, password=null, nickName=null, ...)
(由 @ToString 注解自动生成,包含所有字段的当前值。未赋值的字段(如 userId、password 等)会显示为 null,继承自 BaseEntity 的字段(如创建时间、更新时间等)也会显示默认值) 说明:
userId 为 null 是因为此时仅创建了对象,未通过 MyBatis-Plus 的 save 方法保存到数据库,雪花算法的 ID 生成逻辑在保存时才会触发。
其他未赋值的字段(password、nickName 等)也会显示为 null,除非在 BaseEntity 中定义了默认值。