在 MySQL 中,可以有如下几种途径实现唯一值:
- 自增序列
- UUID() 函数
- 程序自定义
MySQL 实现了 UUID,并且提供 UUID() 函数方便用户生成 UUID。
SELECT UUID()
===> 3525f31e-6bbb-423b-92f5-9ef63110c2f7
在上面 MySQL 的 UUID() 函数生成中,针对UUID产生的值组成部分,分别如下:
- 前三组数字从时间戳中生成
- 第四组数字暂时保持时间戳的唯一性
- 第五组数字是一个 IEEE 802 节点标点值,保证空间唯一。使用 UUID() 函数,可以生成时间、空间上都独一无二的值
- 在外部Java Spring通过SQL语句来查询数据库时,得到的表字段属性是UUID的值和数据里面的值不一样,这里只需要在java类中加上 @Type(type = “uuid-char”)属性,实际代码如下:
@Entity
@Table(name = "roles")
public class RoleDto implements Serializable {
private UUID id;
private String code;
private String name;
private int status;
private UUID tenantId;
@Id
@Type(type = "uuid-char")
@GeneratedValue
public UUID getId() {
return id;
}
public void setId(UUID id) {
this.id = id;
}
@Basic
@Column(name = "code")
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
@Basic
@Column(name = "name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Basic
@Column(name = "status")
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
@Basic
@Type(type = "uuid-char")
@Column(name = "tenant_id")
public UUID getTenantId() {
return tenantId;
}
public void setTenantId(UUID tenantId) {
this.tenantId = tenantId;
}