MyBatis-Plus 核心功能篇 > 主键生成策略 ⇒ 雪花算法

目标:

了解 Mybatis-Plus 它的主键生成算法


学习步骤:

1、何为❄雪花算法
2、实现雪花ID自增
3、了解MyBatis-Plus 的主键生成策略 ⇒ IdType 枚举类

一、❄雪花算法是什么?

一个long类型的Java 长整型数字

核心思想:使用 41 bit 作为 毫秒数, 10 bit 作为机器 ID(5个bit是数据中心,5个bit是机器ID),12 bit 作为 毫秒内的流水号(意味着每个节点在每毫秒可以产生4096个ID),最后还有一个符号位,永远是0,几乎可以保证全球唯一 !

二、代码测试一波

此处接的是上一篇 MyBatis-Plus博文的数据库和代码

    @Test
    void testInsert(){
        User user = new User();
        user.setName("CSNZ");
        user.setAge(21);

        int res = userMapper.insert(user);
        System.out.println(res);
    }

实体类字段上加上 @TableId(type = IdType.ID_WORKER)

在这里插入图片描述

插入成功,查看数据库数据

在这里插入图片描述

此时这个 id 就是雪花ID ❄

再执行一次呢?

在这里插入图片描述

确实是不同的,但此时id却不是自增的,如果我们想要他自增呢?如何实现?
尝试数据库中设置id主键自增,再插入试试

在这里插入图片描述

发现不得行啊!

得在实体类字段上加上 @TableId(type = IdType.AUTO)

IdType 的属性值默认为 AUTO

在这里插入图片描述

现在有了这两个 前提条件下 再插入数据试试

在这里插入图片描述

成功了!

实现雪花id

实体类字段需 加上 @TableId(type = IdType.ID_WORKER)

如果想实现主键自增

1、实体类字段需 加上 @TableId(type = IdType.AUTO)
2、数据库字段一定要是自增的!

三、那么到这里肯定就有疑惑了,这个TableId究竟是啥玩意儿~

在这里插入图片描述

可以看到这是一个注解,有value属性和 type 属性,并且type属性的默认值为 NONE

进一步可以看到IdType 又是一个枚举类

MyBatis-Plus 的主键生成策略 就是取决于这些枚举变量!在这里插入图片描述

mybatis-plus3.3.0之后,共有五种主键生成策略

public enum IdType {
    /**
     * 数据库ID自增,数据库需要支持主键自增(如MySQL),并设置主键自增
     */
    AUTO(0),

    /**
     * 该类型为未设置主键类型,默认使用雪花算法生成
     */
    NONE(1),

    /**
     * 用户输入ID,数据类型和数据库保持一致就行
     * <p>该类型可以通过自己注册自动填充插件进行填充</p>
     */
    INPUT(2),

    /* 以下3种类型、只有当插入对象ID 为空,才自动填充。 */
    /**
     * 全局唯一ID (idWorker),数值类型  数据库中也必须是数值类型 否则会报错
     */
    ID_WORKER(3),
    /**
     * 全局唯一ID (UUID,不含中划线)
     */
    UUID(4),
    /**
     * 字符串全局唯一ID (idWorker 的字符串表示),数据库也要保证一样字符类型
     */
    ID_WORKER_STR(5);
}
  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值