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

前言

Mybatis Plus版本是3.3.0

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

  1. 原来的表中的id(mp的代码生成器默认),如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/**
* <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;
}
  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即可:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    /**
    * <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生成器

    20200303134000811

    20200303134020685

20200303134043174

打赏
  • 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!
  • © 2020 yak33
  • Powered by Hexo Theme Ayer
  • PV: UV:

请我喝杯咖啡吧~

支付宝
微信