问题现象

1.建表语句中设置id为自增id

create table aaa(    id                   bigint unsigned auto_increment comment '自增id'        primary key,   type                 int          default 0                 not null comment '1.全部满足 2.任一满足',    create_time          timestamp    default CURRENT_TIMESTAMP not null comment '创建时间',    update_time          timestamp    default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '更新时间',         )   charset = utf8;

2.插入数据

直接全部使用默认值插入数据库

INSERT INTO aaa (type, create_time, update_time) VALUES ( DEFAULT, DEFAULT, DEFAULT);

3.数据库中查看数据

查看发现自增id直接来到了 1580089915291529217且从第八位后毫无规律
![在这里插入图片描述](https://img-blog.csdnimg.cn/451356914432461bbf7aa233de82e611.png

4.删除数据并把自增id设置为1,重新用代码插入数据

执行如下sql

delete from aaa;alter table aaa  auto_increment = 1;

然后执行代码插入数据

查看数据库发现自增id依旧是随机数

5.分析原因

计算下这个id的长度,共19位,恰好是雪花算法id长度。mysql不可能自己生成雪花算法id,问题应该在mybatisplus上,对比下刚生成的代码和之前的代码,发现实体类主键上缺少如下注解

@TableId(value = "id", type = IdType.AUTO)

6.确认问题

为实体类主键加上注解

   /**     * 自增id     */    @TableId(value = "id", type = IdType.AUTO)    private Long id;

重置自增主键,执行如下sql

alter table aaa  auto_increment = 1;

再次执行代码插入数据
发现数据已经正常

之后查看了mybatisplus主键策略枚举

public enum IdType {    AUTO(0),    NONE(1),    INPUT(2),    ASSIGN_ID(3),    ASSIGN_UUID(4),    /** @deprecated */    @Deprecated    ID_WORKER(3),    /** @deprecated */    @Deprecated    ID_WORKER_STR(3),    /** @deprecated */    @Deprecated    UUID(4);    private final int key;    private IdType(int key) {        this.key = key;    }    public int getKey() {        return this.key;    }}

其中 AUTO 是自增,不加注解mybatisplus会默认使用 ASSIGN_ID策略,即雪花算法。
自此真相大白

结论

mybatisplus自增主键要在实体主键上加如下注解

@TableId(value = "id", type = IdType.AUTO)