欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Mybatisplus主键生成策略算法解析

程序员文章站 2022-08-27 13:07:13
mybatisplus支持多种主键生成策略,默认采用认 id_worker 即雪花算法雪花算法snowflflake是twitter开源的分布式id生成算法,结果是一个long型的id。其核心思想是:...

mybatisplus支持多种主键生成策略,默认采用认 id_worker 即雪花算法

雪花算法

snowflflake是twitter开源的分布式id生成算法,结果是一个long型的id。其核心思想是:使用41bit作为毫秒数,10bit作为机器的id(5个bit是数据中心,5个bit的机器id),12bit作为毫秒内的流水号(意味着每个节点在每毫秒可以产生 4096 个 id),最后还有一个符号位,永远是0。可以保证几乎全球唯一!

mybatisplus默认主键生成策略有可能会和我们的数据库产生冲突,导致插入数据失败;当遇到这种情况时,我们需要自己配置主键生成策略,在实体类对应主键加注解

package com.yl.bean;

import com.baomidou.mybatisplus.annotation.fieldfill;
import com.baomidou.mybatisplus.annotation.idtype;
import com.baomidou.mybatisplus.annotation.tablefield;
import com.baomidou.mybatisplus.annotation.tableid;
import lombok.data;
import lombok.noargsconstructor;

import java.io.serializable;
import java.util.date;

/**
 * 用户实体类
 */
@data
@noargsconstructor
public class user implements serializable {
  @tableid(type=idtype.auto)//配置主键
  private integer id;
  private string name;
  private integer age;
  private string email;
  @tablefield(fill = fieldfill.insert )//插入数据时更新该字段
  private date createtime;
  @tablefield(fill = fieldfill.insert_update)//插入和修改时更新该字段
  private date updatetime;
}

主键生成类型源码解释

public enum idtype {
auto(0), // 数据库id自增,选择这种类型数据库表主键要设置为自增
none(1), // 未设置主键
input(2), // 手动输入
id_worker(3), // 默认的全局唯一id
uuid(4), // 全局唯一id
uuid id_worker_str(5); //id_worker 字符串表示法 }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。