MyBatis-Plus主键生成策略[MyBatis-Plus系列] - 第491篇
历史文章(文章累计490+)
《国内最全的Spring Boot系列之一》
《国内最全的Spring Boot系列之二》
《国内最全的Spring Boot系列之三》
《国内最全的Spring Boot系列之四》
《国内最全的Spring Boot系列之五》
《国内最全的Spring Boot系列之六》
表名注解/主键注解/字段注解/乐观锁注解[MyBatis-Plus系列] - 第486篇
MyBatis-Plus通用Service快速实现赠三改查[MyBatis-Plus系列] - 第489篇
SpringBoot集成MyBatis-Plus + MyBatis-Plus代码生成器[MP系列] - 第490篇
悟纤:师傅,你说人为什么拥有的时候不珍惜,而是等失去了才珍惜呢?
师傅:就像你养了一只可爱的小猫咪,你只享受着它带给你的温柔和可爱,却不知道珍惜它照顾它,直到有一天,小猫咪病倒了,最后抢救无效小猫咪永远地离开了你,这时候你才想去珍惜却已经晚了,你很懊悔也很伤心,责备自己为什么在猫咪活着的时候没有珍惜它照顾好它。
师傅:在现实中的伴侣也是如此,拥有的时候不知道去珍惜,各种作......直到失去后,抓心挠肝的悔不当初,甚至用头哐哐的撞大墙。
师傅:因为你知道她/他不会离开你,你却一直挑战他/她的底线。最后终于失去才后悔莫及。
悟纤:那师傅我们可以做什么?
师傅:任何时候都应该懂得感恩,懂得回报,懂得珍惜 。
悟纤:师傅,我懂了,要时刻有一颗感恩的心,不要把对方对你的好认为是理所当然。
师傅:是这个道理,但做起来很难。时刻去内观自己的心境,提高自己的情绪管理能力,不要情绪把情绪发泄给对方,等等。相处之道本就是一门很大的学门。
悟纤:徒儿受益匪浅,还是要强大自己,才能够去保护自己想保护的。
导读
Hi,大家好,我是悟纤。过着爱谁谁的生活,活出不设限的人生。
Mybatis Plus 为我们提供了三种设置主键生成策略的方式。它们的优先级顺序是:局部注解 > 全局 > 默认(雪花算法),下面我们来一一介绍。
一、常用的主键生成策略
主键生成策略是指在数据库中为每条记录生成唯一标识符的方法。常用的主键生成策略有以下几种:
(1)自增长(自动编号):每添加一条记录,自动加1;优点是能够保证主键唯一,缺点是无法在分布式系统中实现。
(2)UUID/GUID:采用随机算法生成的字符串,理论上能够保证不重复,但主键长度较长,不便于存储和索引。
(3)分布式ID生成器:采用雪花算法、UID、美团Leaf等算法生成的主键,能够在分布式系统中实现全局唯一,且主键长度较短,但实现略复杂。
(4)数据库序列(Sequence):一种由数据库提供的生成主键的方法,能够保证主键唯一,但无法在分布式系统中实现。
(5)组合主键:将多个字段组合成一个主键,能够保证唯一性,但可能存在冗余数据和空值。
二、Java中的主键生成策略
在Java中,给实体类定义主键时一般需要指定主键生成策略,常用的主键生成策略有以下几种:
(1)自增长策略(GenerationType.IDENTITY) 这种策略是指数据库自动为每一行添加一个唯一的标识列,并且在插入数据时自动递增。在MySQL中,可以使用AUTO_INCREMENT关键字来定义自增长列。
(2)序列策略(GenerationType.SEQUENCE) 序列策略是指使用数据库中的序列生成主键,序列是一种特殊的对象,可以自动创建一组连续的数字。在Oracle中,可以使用CREATE SEQUENCE语句来定义序列。
(3)表策略(GenerationType.TABLE) 表策略是指在数据库中定义一个专门用于生成主键的表,包含了一个主键字段和一个取值字段。在插入数据时,先从这个表中获取一个值作为主键,并且同时更新取值字段的值,确保每个主键都是唯一的。
(4)UUID策略(GenerationType.UUID) UUID策略是指使用Java中的UUID来生成主键,UUID是一种通用唯一标识符,可以作为主键使用。
在JPA中,可以通过@Entity注解为实体类定义主键生成策略,例如:
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) // 指定自增长策略
private Long id;
...
}
三、局部和全局设置主键生成策略
在MP中,如何配置主键的生成策略呢?主要有两种方式:局部配置和全局配置。
3.1 局部设置
局部的配置方式直接在主键字段上添加@TableId的注解,并且通过type来设置生成策略:
@TableId(type = IdType.ASSIGN_ID)
private Long id;
3.2 全局设置
全局设置的方式只需要在配置文件application.properties(yml)中进行配置:
mybatis-plus.global-config.db-config.id-type=assign_id
四、IdType取值
值 | 描述 |
AUTO | 数据库 ID 自增 |
NONE | 无状态,该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT) |
INPUT | insert 前自行 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) |
UUID | 32 位 UUID 字符串(please use ASSIGN_UUID) |
ID_WORKER_STR | 分布式全局唯一 ID 字符串类型(please use ASSIGN_ID) |
特别说明:
(1)如果设置类型是AUTO自增策略,数据库字段一定设置自增。
(2)在没有进行设置主键生成算法的时候,默认算法是雪花算法。
雪花算法是一种用于生成全局唯一ID的算法,它的全名为雪花ID算法(Snowflake ID Algorithm)。该算法产生的ID是一个64位的整型数,由三部分组成:时间戳 + 机器ID + 序列号。其中,时间戳占41位,可以精确到毫秒级别;机器ID占10位,可以支持1024台机器;序列号占12位,可以支持每台机器每毫秒产生4096个ID。因此,雪花算法可以在分布式系统中生成唯一的ID,保证ID的唯一性和有序性,同时也支持高并发的ID生成需求。
小结
本文主要介绍了MP的主键生成策略,在实际项目常见的是:
(1)AUTO:数据库 ID 自增。
(2)ASSIGN_ID:使用接口IdentifierGenerator的方法nextId(默认实现类为DefaultIdentifierGenerator雪花算法)。
(3)雪花算法:雪花算法是一种用于生成全局唯一ID的算法,它的全名为雪花ID算法(Snowflake ID Algorithm)。该算法产生的ID是一个64位的整型数,由三部分组成:时间戳 + 机器ID + 序列号。其中,时间戳占41位,可以精确到毫秒级别;机器ID占10位,可以支持1024台机器;序列号占12位,可以支持每台机器每毫秒产生4096个ID。因此,雪花算法可以在分布式系统中生成唯一的ID,保证ID的唯一性和有序性,同时也支持高并发的ID生成需求。
点赞、转发、评论,伸出你的双手666…
你就是你,不一样的小蚂蚁!
我就是我,是颜色不一样的烟火。
我就是我,是与众不同的小苹果。
à悟纤学院:https://t.cn/Rg3fKJD
学院中有Spring Boot相关的课程!点击「阅读原文」进行查看!
SpringBoot视频:http://t.cn/A6ZagYTi
SpringBoot交流平台:https://t.cn/R3QDhU0
SpringSecurity5.0视频:http://t.cn/A6ZadMBe
ShardingJDBC分库分表:http://t.cn/A6ZarrqS
分布式事务解决方案:http://t.cn/A6ZaBnIr
JVM内存模型调优实战:http://t.cn/A6wWMVqG
Spring入门到精通:https://t.cn/A6bFcDh4
大话设计模式之爱你:https://dwz.cn/wqO0MAy7
相关文章:

MyBatis-Plus主键生成策略[MyBatis-Plus系列] - 第491篇
历史文章(文章累计490) 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 …...
Spring——和IoC相关的特性
目录 IoC中Bean的生命周期 实例化(Instantiation) 属性注入(Populate Properties) 初始化(Initialization) 使用(Bean in Use) 销毁(Destruction) Laz…...

在 TensorFlow 中调试
如果调试是消除软件错误的过程,那么编程一定是添加错误的过程。Edsger Dijkstra。来自 https://www.azquotes.com/quote/561997 一、说明 在这篇文章中,我想谈谈 TensorFlow 中的调试。 在之前的一些帖子(此处、此处和此处)中&…...

想要精通算法和SQL的成长之路 - 连续的子数组和
想要精通算法和SQL的成长之路 - 连续的子数组和 前言一. 连续的子数组和1.1 最原始的前缀和1.2 前缀和 哈希表 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 连续的子数组和 原题链接 1.1 最原始的前缀和 如果这道题目,用前缀和来算,我们的思路…...

【C++】头文件chrono
2023年10月16日,周一晚上 当前我只是简单的了解了一下chrono 以后可能会深入了解chrono并更新文章 目录 功能原理头文件chrono中的一些类头文件chrono中的数据类型一个简单的示例程序小实验:证明a的效率比a高 功能 这个chrono头文件是用来处理时间的…...

Python学习六
前言:相信看到这篇文章的小伙伴都或多或少有一些编程基础,懂得一些linux的基本命令了吧,本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python:一种编程语言&…...
Springboot 集成 WebSocket
WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接…...

谨以此篇,纪念我2023年曲折的计算机保研之路
目录 阶段一:迷茫阶段二:准备个人意愿保研材料准备套磁老师5.1日 浙大线上编程测试5.8日 浙大线上面试 —— 一面5.17日 浙大线上面试——二面5.29日 实验室面试结果5.27日 南开线上面试6.20日 华师电话面试 阶段三:旅途北航CS(6.…...

VSS、VDD、VBAT、VSSA
引言 在学习设计TM32时,发现芯片除了GPIO引脚外还会引出许多引脚,以STM32F407ZGT6为例除了GPIO引脚还会有以下引脚 如VSS、VDD、VBAT、VSSA、NRST、VREF、VDDA、VCAP_1、VCAP_2、PDR_ON这些引脚。他们有何作用,电路设计中应如何连接&#x…...
【Rust基础③】方法method、泛型与特征
文章目录 6 方法 Method6.1 定义方法self、&self 和 &mut self 6.2 自动引用和解引用6.3 关联函数 7 泛型和特征7.1 泛型 Generics7.1.1 结构体中使用泛型7.1.2 枚举中使用泛型7.1.3 方法中使用泛型为具体的泛型类型实现方法 7.1.4 const 泛型 7.2 特征 Trait7.2.1 为类…...

48.排列问题求解
思路分析:通过为每一队分配一个id,join条件要求t1.num < t2.num实现相同两队只比一次 代码实现: with t as (SELECT team_name,caseteam_nameWHEN 勇士 then 1WHEN 湖人 then 2WHEN 灰熊 then 3else 4end numFROM team )SELECT t1.team_…...

18.(开发工具篇Gitlab)Git如何回退到指定版本
首先: 使用git log命令查看提交历史,找到想要回退的版本的commit id. 使用git reset命令 第一步:git reset --hard 命令是强制回到某一个版本。执行后本地工程回退到该版本。 第二步:利用git push -f命令强制推到远程 如下所示: 优点:干净利落,回滚后完全回到最初状态…...

IDEA初始配置
1. 详细设置 安装完IDEA之后的简单配置。 1.1 如何打开详细配置界面 1、显示工具栏 2、选择详细配置菜单或按钮 1.2 系统设置 1、默认启动项目配置 启动IDEA时,默认自动打开上次开发的项目?还是自己选择? 如果去掉Reopen projects on …...
WM_COPYDATA传回返回值的一个方案
方案背景 适应场景,通过WM_COPYDATA进行进程间通信时,SendMessage不能返回自定义的数据,由此想到以下思路解决这个问题 A进程使用VirtualAlloc分配一块内存,通过某种方式将此地址以及A进程ID传给另一个进程B B进程使用OpenProce…...

【日常业务开发】接口性能优化
【日常业务开发】接口性能优化 缓存本地缓存分布式缓存 数据库分库分表SQL 优化 业务程序并行化异步化池化技术预先计算事务粒度批量读写锁的粒度尽快return上下文传递空间换时间集合空间大小 缓存 本地缓存 本地缓存,最大的优点是应用和cache同一个进程内部&…...

Android 10.0 禁止弹出系统simlock的锁卡弹窗功能实现
1.前言 在10.0的系统开发中,在一款产品中,需要实现simlock锁卡功能,在系统实现锁卡功能以后,在开机的过程中,或者是在插入sim卡 后,当系统检测到是禁用的sim卡后,就会弹出simlock锁卡弹窗,要求输入puk 解锁密码,功能需求禁用这个弹窗,所以就需要看是 哪里弹的,禁用…...

VulnHub lazysysadmin
一、信息收集 1.nmap扫描开发端口 开放了:22、80、445 访问80端口,没有发现什么有价值的信息 2.扫描共享文件 enum4linux--扫描共享文件 使用: enum4linux 192.168.103.182windows访问共享文件 \\192.168.103.182\文件夹名称信息收集&…...

ppt怎么压缩到10m以内?分享ppt缩小方法
在日常工作中,我们常常需要制作和分享PowerPoint演示文稿,然而,有时候文稿中的图片、视频等元素会导致文件过大,无法在电子邮件或其他平台上顺利传输。为了将PPT文件压缩到10M以内,我们可以使用一些专门的文件压缩工具…...

智能警用装备管理系统-科技赋能警务
警用物资装备管理系统(智装备DW-S304)是依托互云计算、大数据、RFID技术、数据库技术、AI、视频分析技术对警用装备进行统一管理、分析的信息化、智能化、规范化的系统。 (1)感知智能化 装备感知是整个方案的基础,本方…...

攻防千层饼
近年来,网络安全领域正在经历一场不断升级的攻防对抗,这场攻防已经不再局限于传统的攻击与防御模式,攻击者和防守者都已经越发熟练,对于传统攻防手法了如指掌。 在这个背景下,攻击者必须不断寻求创新的途径࿰…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...

【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...

用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...