mybatis plus主键自增策略

我们知道mybatis plus中自带着一套主键生成的策略。

其内部是根据snowflake算法而生成的,snowflake是Twitter开源的分布式ID生成算法,结果是一个long型的ID。

本次主要是如何应用主键策略,并不会讲解snowflake算法。

核心思想:
使用41bit作为毫秒数,10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID),12bit作为毫秒内的流水号(意味着每个节点在每毫秒可以产生 4096 个 ID),最后还有一个符号位,永远是0。具体实现的代码可以参看https://github.com/twitter/snowflake
雪花算法在工程实现上有单机版本和分布式版本。单机版本如下,分布式版本可以参看美团leaf算法:https://github.com/Meituan-Dianping/Leaf

实现方法:
要想主键自增需要配置如下主键策略,需要在创建数据表的时候设置主键自增,实体字段中配置 @TableId(type = IdType.AUTO)。如下图实体类所示:
在这里插入图片描述
要想影响所有实体的配置,可以配置文件中设置全局主键配置
在这里插入图片描述
下面说明一下IdType该枚举类主要几个可以生成主键的方法。
在这里插入图片描述

AUTO:自动增长
ID_WORKER:mq自动策略,生成19位值,数字类型使用这种策略,比如long
ID_WORDKER_STR:mq自动策略,生成19位值,字符串类型使用这种策略,比如String
INPUT:手动输入/设置id
NONE:不使用任何策略
UUID:随机生成唯一值

IdType源码简单分析

@Getter
public enum IdType {
    /**
     * 数据库ID自增
     */
    AUTO(0),
    /**
     * 该类型为未设置主键类型
     */
    NONE(1),
    /**
     * 用户输入ID
     * 该类型可以通过自己注册自动填充插件进行填充
     */
    INPUT(2),

    /* 以下3种类型、只有当插入对象ID 为空,才自动填充。 */
    /**
     * 全局唯一ID (idWorker)
     */
    ID_WORKER(3),
    /**
     * 全局唯一ID (UUID)
     */
    UUID(4),
    /**
     * 字符串全局唯一ID (idWorker 的字符串表示)
     */
    ID_WORKER_STR(5);

    private int key;

    IdType(int key) {
        this.key = key;
    }
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值