千家信息网

mybatis-plus怎么使用雪花算法ID生成策略

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本篇内容介绍了"mybatis-plus怎么使用雪花算法ID生成策略"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,
千家信息网最后更新 2026年11月03日mybatis-plus怎么使用雪花算法ID生成策略

本篇内容介绍了"mybatis-plus怎么使用雪花算法ID生成策略"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

mybatis-plus 可以通过@TableId注解指定主键生成策略

@TableId(value="id",type=IdType.ASSIGN_ID)
值描述
AUTO数据库ID自增
NONE无状态,该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT)
INPUTinsert前自行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)
UUID32位UUID字符串(please use ASSIGN_UUID)
ID_WORKER_STR分布式全局唯一ID 字符串类型(please use ASSIGN_ID)

上面的注解设置了值,对应在MybatisDefaultParameterHandler中有判断这个类型和设置ID的处理,判断idType.getKey() == IdType.ASSIGN_ID.getKey()时,使用identifierGenerator.nextId(entity)创建了一个雪花算法ID。

protected static void populateKeys(TableInfo tableInfo, MetaObject metaObject, Object entity) {        IdType idType = tableInfo.getIdType();        String keyProperty = tableInfo.getKeyProperty();        if (StringUtils.isNotBlank(keyProperty) && null != idType && idType.getKey() >= 3) {            IdentifierGenerator identifierGenerator = GlobalConfigUtils.getGlobalConfig(tableInfo.getConfiguration()).getIdentifierGenerator();            Object idValue = metaObject.getValue(keyProperty);            if (StringUtils.checkValNull(idValue)) {                if (idType.getKey() == IdType.ASSIGN_ID.getKey()) {                    if (Number.class.isAssignableFrom(tableInfo.getKeyType())) {                        metaObject.setValue(keyProperty, identifierGenerator.nextId(entity));                    } else {                        metaObject.setValue(keyProperty, identifierGenerator.nextId(entity).toString());                    }                } else if (idType.getKey() == IdType.ASSIGN_UUID.getKey()) {                    metaObject.setValue(keyProperty, identifierGenerator.nextUUID(entity));                }            }        }     }

3.X版本后默认就是使用 IdType.ASSIGN_ID,即雪花算法,如果需要使用主键自增,则需要修改IdType.AUTO

看一下源码大概找一下雪花算法的实现方式

首先来看主键生成策略的接口是IdentifierGenerator。mp中默认有一个实现类就是DefaultIdentifierGenerator,这个就是雪花算法的实现类。这个类中使用的Sequence就是雪花算法的实现类了。

如果想自己创建雪花算法手动创建ID怎么办

com.baomidou.mybatisplus.core.toolkit包下有一个IdWork的类,这个类就是使用上面的DefaultIdentifierGenerator来获取雪花算法ID,我们可以直接使用IdWork同名方法getId或者getIdStr来手动获取一个雪花算法ID。

Long id=IdWorker.getIdStr()

自定义ID生成器实现

第一种,使用spring扫描注解创建bean使用

@Componentpublic class CustomIdGenerator implements IdentifierGenerator {    @Override    public Long nextId(Object entity) {       //可以将当前传入的class全类名来作为bizKey,或者提取参数来生成bizKey进行分布式Id调用生成.       String bizKey = entity.getClass().getName();        //根据bizKey调用分布式ID生成        long id = ....;       //返回生成的id值即可.        return id;    }}

第二种,直接把写好的CustomIdGenerator实现类配置为一个bean

@Beanpublic IdentifierGenerator idGenerator() {    return new CustomIdGenerator();}

Mybatis-plus 中生成雪花算法id的工具类

public static void main(String[] args) {    // 返回值  1385106677482582018    System.out.println(IdWorker.getId());    // 返回值 "1385106677482582019"    System.out.println(IdWorker.getIdStr());}

"mybatis-plus怎么使用雪花算法ID生成策略"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

算法 雪花 生成 类型 就是 策略 全局 分布式 方法 注解 接口 内容 字符 字符串 手动 更多 知识 面的 分配 实用 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广东万易互联网科技有限公司惠州分公司 深圳恒合互联网络科技有限公司 互联网 科技公司 远拓互联网科技 上海致骋互联网科技 金融科技和互联网金融 无锡溥仪互联网科技有限公司 济南华为互联网科技产业总部基地 茂名市互联网科技产业园 中化能源互联网科技招聘 互联网为啥属于高科技 宝灵互联网科技有限公司 广西互联网科技孵化中心 翼展科技 首家互联网医院 深圳市罗太互联网科技有限公司 互联网科技大赛获奖感言 上海京穆互联网科技有限公司 唐山双旺合互联网科技产业园 互联网科技创业计划的风险分析 互联网大会出现的黑科技 互联网与科技金融数据 金融科技与互联网金融 狮子座互联网科技 智网互联网科技 互联网科技小额贷款 广州紫鲸互联网科技 互联网科技创新企业排名 速维有品互联网信息科技(苏州)有限公司 山东大美朱楼互联网科技有限公司 广州全民伙伴互联网科技有限公司
0