前言
Mybatis Plus版本是3.3.0
目前手上的项目中用的数据库是MySQL,所有的表中主键ID都是int自增长,现在引入了几个外部的表,主键ID是用的String类型的UUID,就不能用代码生成器自动生成的默认的策略了。
- 原来的表中的id(mp的代码生成器默认),如:
/**
* <p>
* 发票表
* </p>
*
* @author zhangchao
* @since 2019-09-16
*/
@Data
public class ApplyInvoices {
@TableId(value = "ID", type = IdType.AUTO)
private Long id;
/**
* 发票号
*/
@TableField("INVOICE_NO")
private String invoiceNo;
/**
* 发票流水号
*/
@TableField("CUSTOMS_CODE")
private String customsCode;
}
-
查阅mp的官方文档@TableId注解,可知有如下几种方式:
@TableId
-
描述:主键主键
属性 类型 必须指定 默认值 描述 value String 否 “” 主键字段名 type Enum 否 IdType.NONE 主键类型
-
IdType:
值 | 描述 |
---|---|
AUTO | 数据库ID自增 |
NONE | 无状态,该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT) |
INPUT | insert前自行set主键值 |
ASSIGN_ID | 分配ID(主键类型为Number(Long和Integer)或String)(since 3.3.0),使用接口IdentifierGenerator 的方法nextId (默认实现类为DefaultIdentifierGenerator 雪花算法) |
ASSIGN_UUID | 分配UUID,主键类型为String(since 3.3.0),使用接口IdentifierGenerator 的方法nextUUID (默认default方法) |
分布式全局唯一ID 长整型类型(please use ASSIGN_ID ) | |
32位UUID字符串(please use ASSIGN_UUID ) | |
分布式全局唯一ID 字符串类型(please use ASSIGN_ID ) |
-
将新加的UUID做主键的表实体对象中ID设置为ASSIGN_UUID即可:
/** * <p> * 用户表设置 * </p> * * @author zhangchao * @since 2020-03-02 */ @Data @TableName("Gy_User") public class GyUser implements Serializable { private static final long serialVersionUID = 1L; /** * 唯一标识ID */ @TableId(value = "UUID",type = IdType.ASSIGN_UUID) private String uuid; /** * 用户编码 */ @TableField("UserCode") private String UserCode; }
另外,还可以自定义ID生成器。
PS: 更多技术干货,欢迎大家来我的个人博客 yak33的技术人生