MyBatisPlus之id生成策略

MyBatisPlus-ASSIGN_ID、ASSIGN_UUID策略、雪花算法及简化配置 MyBatisPlus-ASSIGN_ID、ASSIGN_UUID策略及简化配置的简单示例 阅读详情

一、为什么需要选择不同的id生成策略

 不同的表的id:

  • 日志:自增(1,2,3,4,……)

  • 购物订单:特殊规则(FQ23948AK3843)

  • 外卖单:关联地区日期等信息(10 04 20200314 34 91)

  • 关系表:可省略id

  • ……

不同的业务采用的ID生成方式应该是不一样的,那么在MyBatisPlus(以下简称MP)中都提供了哪些主键生成策略,以及我们该如何进行选择?  

二、如何使用MP的id生成策略

这里需要使用到一个注解 @TableId( type = id生成策略 ) ,将改注解加到实体类的id属性上,如下:

@Data
@TableName("tbl_user")
public class User {

    @TableId(type = IdType.AUTO)
    private Long id;

    ...

}

其中的id生成策略的取值来自枚举类 IdType 如下:

 从源码中可以看到,共有如下几种生成策略:

  • AUTO:id自增

  • NONE: 不设置id生成策略

  • INPUT:用户手工输入id

  • ASSIGN_ID:雪花算法生成id

  • ASSIGN_UUID:以UUID生成算法作为id生成策略

  • 其他的几个策略均已过时,都将被ASSIGN_ID和ASSIGN_UUID代替掉。

 AUTO

使用AUTO策略的时候一定要确保对应的数据库表设置了ID主键自增,否则无效

另外,AUTO策略不能在分布式系统中使用,因为每台数据库服务器如果都基于本地的最新ID进行自增,那就会出现ID冲突

NONE

不设置id生成策略,MP不自动生成,约等于INPUT

INPUT

这种ID生成策略,需要将表的自增策略删除掉,然后手动设置ID值

    void userSave(){
        User user = new User();
        //设置主键ID的值
        user.setId(123456L);
        
        //为其他属性赋值...

        userDao.insert(user);
    }

ASSIGN_ID

采用该策略时,如果用户自己设置ID,MP会使用用户设置的ID,如果用户不自己设置ID值,那么MP会根据雪花算法自动生成ID,该策略可在分布式系统中使用


雪花算法:

雪花算法生成的是一个64bit大小的整数(对应Long)

时间戳:用来记录时间戳,毫秒级

工作机器id:用来记录工作机器id

序列号:占用12bit,每个节点每毫秒0开始不断累加,最多可以累加到4095,一共可以产生4096个ID


从上面可以看出,ASSIGN_ID 生成的策略和服务器时间有关,如果修改了系统时间就有可能导致出现重复主键 ,这点需要注意

ASSIGN_UUID

ASSIGN_UUID是自动生成一个不重复的、长度为32位的字符串,也能在分布式系统中使用

因此使用ASSIGN_UUID时需要注意:

  • 实体类的主键类型不能是Long,而应该改成String类型
  • 表中的主键类型设置为varchar,长度要大于32,如果长度小的话就会导致插入失败

ASSIGN_UUID的缺点比较明显:生成的主键是32位的字符串,长度过长占用空间而且还不能排序,查询性能也慢

Mabatis Plus 之ID生成策略控制(Auto、Input、assign_id、assign_uuid) 主键类型设置为varchar,长度要大于32,因为UUID生成的主键为32位,如果长度小的话就会导致插入失败。不同的业务采用的ID生成方式应该是不一样的,那么在MP中都提供了哪些主键生成策略,以及我们该如何进行选择?因为之前生成主键ID的值比较长,会把MySQL的自动增长的值变的很大,所以需要将其调整为目前最新的id值。:这种生成策略,不需要手动设置ID,如果手动设置ID,则会使用自己设置的值。,在使用该策略的时候一定要确保对应的数据库表设置了ID主键自增,否则无效。 阅读详情

相关推荐

MyBatis-Plus自定义ID生成器:打造专属主键策略

在数据库设计中,主键的选择和生成策略至关重要。MyBatis-Plus提供了多种ID生成策略,同时支持自定义ID生成器,满足不同业务需求。组成部分位数说明符号位1位固定为0时间戳41位精确到毫秒,可用69年工作机器ID10位5位数据中心ID + 5位机器ID序列号12位同一毫秒内的自增序号,最多4096个​✅优点全局唯一性保证趋势递增(对索引友好)包含时间信息高性能(每秒可生成百万级ID)@Bean@Data⚠️注意。

m0_65382359的博客 2509

MybatisPlus---id生成策略

mybatis

Leo_Wcg的博客 2333

重写mybatisPlus自定义ID生成策略

ASSIGN_UUID即为重写后生成的UUID,原生成的uuid为32位,没有-连接符,id需要使用String类型。此方法为重写覆盖原生mybatisplus,所以不影响其他地方,id依然会在insert时自动生成.2.新建一个类实现IdentifierGenerator,重写id生成策略。ASSIGN_ID即为重写后生成的雪花id,值为Long类型。4.在实体bean映射类中使用需要在ID字段上加入注解。3.在mybatisplus配置文件中注入bean。

qq_24138151的博客 1034

Mybatis-plus id生成策略

id生成策略

qq_54247497的博客 6986

Zynq实战:如何用AXI4-Stream To Video Out实现HDMI视频输出(附时序调试技巧)

本文详细介绍了基于Zynq平台使用AXI4-Stream To Video Out IP核实现HDMI视频输出的工程化解决方案。内容涵盖系统架构设计、AXI4-Stream接口优化、异步FIFO配置、时序同步调试技巧等核心环节,特别针对1080p60视频输出提供具体参数配置和性能优化建议,帮助开发者快速构建稳定的视频处理系统。

sql99的博客 462

STM32巡线小车PID调参实战:从五路灰度传感器数据到稳定运行的避坑指南

本文详细介绍了STM32巡线小车的PID调参实战,从五路灰度传感器数据处理到PID参数优化,提供了系统化的调试方法和常见问题解决方案。通过加权平均法计算偏移量,逐步调整比例、积分、微分参数,实现小车稳定巡线。文章还涵盖了定时器配置、控制周期优化及高级调试技巧,帮助开发者避开常见陷阱,提升巡线性能。

weixin_42570484的博客 193

[MyBatisPlus]id生成策略控制

主键类型设置为varchar,长度要大于32,因为UUID生成的主键为32位,如果长度小的话就会导致插入失败。不同的业务采用的ID生成方式应该是不一样的,那么在MP中都提供了哪些主键生成策略,以及我们该如何进行选择?因为之前生成主键ID的值比较长,会把MySQL的自动增长的值变的很大,所以需要将其调整为目前最新的id值。综上所述,每一种主键策略都有自己的优缺点,根据自己项目业务的实际情况来选择使用才是最明智的选择。**注意**这种生成策略,不需要手动设置ID,如果手动设置ID,则会使用自己设置的值。....

十八岁讨厌编程的博客 1741

领域驱动设计整理——实体和值对象设计

实体引言在领域驱动设计里,实体的设计可以说是通用语言的核心,也是最开始在模型划分中需要考虑的。怎么样设计实体和怎么样划分限界上下文同样重要。实体的概念就是要保证通用语言的完整性。领域驱动让设计实体的关注点从数据的属性和表的关联转化到了富有行为的领域概念上。 实体是具有可变性的,这是一个和值对象比较明显的区分,也即实体是可以持续得变化,持续得修改,并且具有唯一的标识。在设计实体的时候需要跳出CRUD的

马猴烧酒└(┐卍^o^)卍ドゥルルル~楪詩月「YUZURIHA SHIZUKI」 2万+

mybatisplus的id生成策略失效问题

现在直接说结论,原因是之前没有设置生成策略默认生成策略是雪花算法,然后如果我们使用自增的使用由于上一个数已经变得很大了,所以导致数据库的策略的自增无法生成(这里具体不知道)。点击保存后会系统会帮你 把这个值 设置为数据库表中最大的id。你也可以修改换回雪花算法也能生效 自增-------->雪花不会有问题 如果是雪花------>自增 就需要用到上面的方法了。然后就结束了,这样就可以正常自增,如果你数据库设置了自增这里没有设置会直接报错。1.首先找到该表,把雪花算法的生成的id 的数据删除。

qq_56533553的博客 3719

基于OpenAI Agents构建多智能体工作流:从原理到实战

多智能体系统(Multi-Agent System)是人工智能领域的重要分支,它通过多个智能体(Agent)的协作与交互,解决单一智能体难以处理的复杂任务。其核心原理在于将任务分解、分配与协调,每个智能体具备特定能力,通过通信机制实现信息共享与决策协同。在工程实践中,多智能体框架的价值在于提升任务处理效率、增强系统鲁棒性,并支持模块化开发。典型的应用场景包括自动化工作流编排、复杂问题求解以及人机协同交互。本文以OpenAI Agents SDK为例,深入探讨如何利用其提供的智能体(Agent)、会话(Ses

weixin_28725959的博客 603

手把手教你用DCT/DCG实现Multi-bit FF物理优化(含SPG流程避坑指南)

本文详细解析了Multi-bit FF(MBFF)在芯片物理实现中的优化方法,重点介绍了DCT/DCG与SPG流程的实战应用。通过物理感知综合、寄存器组识别和增量优化三阶段流程,实现PPA(Power-Performance-Area)的协同提升。文章还提供了Innovus与ICC工具的协同优化策略及典型问题排查指南,帮助工程师高效完成MBFF物理优化。

ik67890123的博客 241

03.MyBatisPlus Insert以及自动生成ID策略

在pojo类中设置id的字段,并且为其配置类型。(默认为ASSIGN_ID。

qq_56403015的博客 3399

Python爬虫实战:利用Selenium与反反爬技术高效爬取企查查工商信息

本文将详细介绍如何使用Python最新爬虫技术(包括Selenium、Playwright、智能代理池等)爬取企查查工商信息数据。文章包含完整的代码实现、反反爬策略、数据解析与存储方案,以及法律合规性讨论,共计约8000字。企查查作为国内领先的企业信息查询平台,收录了超过2亿家企业的工商信息、司法信息、知识产权等数据。这些数据对于市场分析、商业决策等具有重要价值。法律边界提示禁止大规模爬取导致服务器过载不得绕过付费接口获取数据数据使用需遵守《个人信息保护法》商业用途需获得授权。

2201_76125261的博客 2236

【MyBatisPlus】MyBatisPlus之id生成策略的方法

本文介绍了MyBatisPlus框架中的三种主键生成策略,即雪花算法、UUID和自增长。使用这些策略,可以为实体类生成唯一、有序的主键值。注意,在使用自增长策略时,需要使用MySQL数据库才能生效。

Bankcary的博客 1279

PCL 循环体素滤波

本文提出了一种自动循环体素滤波算法,用于解决点云配准中分辨率差异大、参数设置复杂的问题。算法通过计算点云分辨率(公式1),采用迭代方式调整体素尺寸(公式2),逐步逼近目标分辨率。该方法在保留几何特征的同时有效精简数据量,实现了均匀分辨率的自动调整。实验通过PCL库实现,展示了原始点云与滤波结果的对比效果,验证了算法在减少数据规模方面的有效性。该方法为点云配准提供了预处理解决方案,相关成果已发表于SCI期刊。

点云侠的博客 281

【100%通过率】2023华为od机试C卷【围棋的气】Python 实现

围棋棋盘由纵横各19条线垂直相交组成,棋盘上一共19 x 19 = 361 个交点,对奔双方一方执白棋,一方执黑棋,落子时只能将棋子置于交点上。 “气”是围棋中很重要的一个概念,某个棋子有几口气,是指其上下左右方向四个相邻的交叉点中,有几个交叉点没有棋子,由此可知:

MISAYAONE的博客 1858

批量添加时id使用mybatisplus的id生成策略

目前项目需要用到批量添加语句,这时候mybatisplus的BaseMapper就无法满足要求了,所以需要自己写批量添加的sql语句。但是又想id使用mybatisplus的生成策略,该怎么办呢

qq_44820964的博客 906

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

mybatisplus中id生成策略

配置表前缀以及id生成策略。

lmj的博客 685

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

分布式系统唯一ID生成方案和MybatisPlus的主键生成策略

分布式系统唯一ID生成方案汇总 MybatisPlus自带的主键生成策略:. Twitter的snowflake算法 snowflake是Twitter开源的分布式ID生成算法,结果是一个long型的ID。其核心思想是:使用41bit作为毫秒数,10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID),12bit作为毫秒内的流水号(意味着每个节点在每毫秒可以产生 4096 个 ID),最后还有一个符号位,永远是0。 如果不配置主键生成策略的话 默认使用mp自带的策略 也可以自己配置 ..

Kaaaakaki的博客 647

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

MybatisPlus 4 DML 编程控制 4.1 id 生成策略控制 4.1.2 代码演示 & 4.1.3 ID 生成策略对比 & 4.1.4 简化配置

MybatisPlus 4 DML 编程控制 4.1 id 生成策略控制 4.1.2 代码演示 & 4.1.3 ID 生成策略对比 & 4.1.4 简化配置

代码改变世界 458

MyBatisPlus查询条件设置、映射匹配兼容性、id生成策略、多数据操作

MyBatisPlus查询条件设置、映射匹配兼容性、id生成策略、多数据操作

宁可枝头抱香死,何曾吹落北风中。 962

MybatisPlus 4 DML 编程控制 4.1 id 生成策略控制 4.1.1 环境构建

MybatisPlus 4 DML 编程控制 4.1 id 生成策略控制 4.1.1 环境构建

代码改变世界 289

简析MybatisPlus插入操作中的主键ID生成策略

插入操作 //插入操作 @Test public void testInsert(){ User user = new User(); user.setName("Helen"); user.setAge(18); user.setEmail("55317332@qq.com"); int result = userMapper.insert(user); System.out.println(result); //影响的行数 System.out.p

Suprit's blog 1646

Java开发学习(四十六)----MyBatisPlus新增语句之id生成策略控制及其简化配置

我们在新增的时候留了一个问题,就是新增成功后,主键ID是一个很长串的内容。我们更想要的是按照数据库表字段进行自增长,在解决这个问题之前,我们先来分析下ID该如何选择:不同的表应用不同的id生成策略日志:自增(1,2,3,4,……)购物订单:特殊规则(FQ23948AK3843)外卖单:关联地区日期等信息(10 04 20200314 34 91)关系表:可省略id……不同的业务采用的ID生成方式应该是不一样的,那么在MyBatisPlus中都提供了哪些主键生成策略,以及我们该如何进行选择。

1480

避雷:MybatisPlus在设置id生成策略时无法设置ASSIGN_ID,无法解析

设置ID生成策略时无法解析符号 'ASSIGN_ID'

weixin_51046930的博客 1952
上一篇: Java编程规约(源于阿里,精简版)
下一篇: JAVA IO模式 —— BIO、NIO、AIO
Fearless____
博客等级 码龄5年 14粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值