Mybatis Plus的主键id生成策略方式

前言

Mybatis Plus版本是3.3.0

目前手上的项目中用的数据库是MySQL,所有的表中主键ID都是int自增长,现在引入了几个外部的表,主键ID是用的String类型的UUID,就不能用代码生成器自动生成的默认的策略了。

  1. 原来的表中的id(mp的代码生成器默认),如:
/**
 * 

* 发票表 *

* * @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; }
  1. 查阅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_WORKER 分布式全局唯一ID 长整型类型(please use ASSIGN_ID)
UUID 32位UUID字符串(please use ASSIGN_UUID)
ID_WORKER_STR 分布式全局唯一ID 字符串类型(please use ASSIGN_ID)
  1. 将新加的UUID做主键的表实体对象中ID设置为ASSIGN_UUID即可:

    /**
     * 

    * 用户表设置 *

    * * @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生成器。
Mybatis Plus的主键id生成策略方式_第1张图片
Mybatis Plus的主键id生成策略方式_第2张图片
Mybatis Plus的主键id生成策略方式_第3张图片

PS: 更多技术干货,欢迎大家来我的个人博客 yak33的技术人生

你可能感兴趣的:(Mybatis Plus的主键id生成策略方式)