Mybatis-Plus id生成策略控制

news2025/1/12 21:02:29

目录

id生成策略控制

不同的表应用不同的id生成策略

名称 @TableId

AUTO策略

除了AUTO这个策略以外,还有如下几种生成策略:

分布式ID是什么?

INPUT策略

ASSIGN_ID策略

ASSIGN_UUID策略

雪花算法

ID生成策略对比


  • id生成策略控制

  • 不同的表应用不同的id生成策略

    • 日志:自增(1,2,3,4,……)
    • 购物订单:特殊规则(FQ23948AK3843)
    • 外卖单:关联地区日期等信息(10 04 20200314 34 91)
    • 关系表:可省略id
    • ……
  • 名称 @TableId

  • 类型 属性注解
  • 位置 模型类中用于表示主键的属性定义上方
  • 作用 设置当前类中主键属性的生成策略
  • 相关属性
    • value(默认):设置数据库表主键名称
    • type:设置主键属性的生成策略,值参照IdType的枚举值
  • AUTO策略

  • 使用数据库id自增策略控制id生成
  • 步骤1:设置生成策略为AUTO

  • 步骤2:运行新增方法
  • 在使用该策略的时候一定要确保对应的数据库表设置了ID主键自增,否则无效
  • 除了AUTO这个策略以外,还有如下几种生成策略:

    • NONE:不设置id生成策略
    • INPUT:用户手工输入id
    • ASSIGN_ID:雪花算法生成id(可兼容数值型与字符串型)
    • ASSIGN_UUID:以UUID生成算法作为id生成策略
  • 其他的几个策略均已过时,都将被ASSIGN_ID和ASSIGN_UUID代替掉
  • 分布式ID是什么?

    • 当数据量足够大的时候,一台数据库服务器存储不下,这个时候就需要多台数据库服务器进行存储
    • 比如订单表就有可能被存储在不同的服务器上
    • 如果用数据库表的自增主键,因为在两台服务器上所以会出现冲突
    • 这个时候就需要一个全局唯一ID,这个ID就是分布式ID
  • INPUT策略

  • 用户手工输入id
  • 步骤1:设置生成策略为INPUT

  • 注意:这种ID生成策略,需要将表的自增策略删除掉

  • 步骤2:添加数据手动设置ID

  • 步骤3:运行新增方法
  • 如果没有设置主键ID的值,则会报错,错误提示就是主键ID没有给值
  • 如果设置了主键ID,则数据添加成功
  • ASSIGN_ID策略

  • 雪花算法生成id
  • 步骤1:设置生成策略为ASSIGN_ID

  • 步骤2:添加数据不设置ID
  • 注意:这种生成策略,不需要手动设置ID,如果手动设置ID,则会使用自己设置的值

  • 步骤3:运行新增方法
  • ASSIGN_UUID策略

  • 以UUID生成算法作为id生成策略
  • 步骤1:设置生成策略为ASSIGN_UUID
  • 使用uuid需要注意的是,主键的类型不能是Long,而应该改成String类型

  • 步骤2:修改表的主键类型
  • 主键类型设置为varchar,长度要大于32,因为UUID生成的主键为32位,如果长度小的话就会导致插入失败

  • 步骤3:添加数据不设置ID

  • 步骤4:运行新增方法
  • 雪花算法

  • 雪花算法(SnowFlake),是Twitter官方给出的算法实现 是用Scala写的
  • 其生成的结果是一个64bit大小整数

  • (1)1bit,不用,因为二进制中最高位是符号位,1表示负数,0表示正数;生成的id一般都是用整数,所以最高位固定为0
  • (2)41bit-时间戳,用来记录时间戳,毫秒级
  • (3)10bit-工作机器id,用来记录工作机器id,其中高位5bit是数据中心ID其取值范围0-31,低位5bit是工作节点ID其取值范围0-31,两个组合起来最多可以容纳1024个节点
  • (4)序列号占用12bit,每个节点每毫秒0开始不断累加,最多可以累加到4095,一共可以产生4096个ID
  • ID生成策略对比

  • NONE:不设置id生成策略,MP不自动生成,约等于INPUT,所以这两种方式都需要用户手动设置,但是手动设置第一个问题是容易出现相同的ID造成主键冲突,为了保证主键不冲突就需要做很多判定,实现起来比较复杂
  • AUTO:数据库ID自增,这种策略适合在数据库服务器只有1台的情况下使用,不可作为分布式ID使用
  • ASSIGN_UUID:可以在分布式的情况下使用,而且能够保证唯一,但是生成的主键是32位的字符串,长度过长占用空间而且还不能排序,查询性能也慢
  • ASSIGN_ID:可以在分布式的情况下使用,生成的是Long类型的数字,可以排序性能也高,但是生成的策略和服务器时间有关,如果修改了系统时间就有可能导致出现重复主键

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/179101.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机组成原理 | 第六章:计算机的运算方法 | 进制转换 | 定点运算 | 浮点数运算

文章目录📚进位计数制🐇任意进制转十进制🐇十进制整数转换为n进制整数🐇十进制小数转换为n进制小数🐇二/八/十六进制的互换📚带符号的二进制数表示⭐️🐇原码表示法🐇补码表示法&…

“买卖股票的最佳时机” 系列——我来教你稳赚不亏~

目录 前言 一、买卖股票的最佳时机 ——>指定次数交易(1次) 1.1、dp定义 1.2、递推公式 1.3、遍历顺序 1.4、初始化 1.5、解题代码 二、买卖股票的最佳时机II ——>交易到结束 2.1、分析 2.2、解题代码 三、买股票的最佳时机III ——>…

【keepass】密码管理软件keepass的安全风险分析,如何在使用keepass的过程中避免泄露数据库信息和密码?

一、安全风险分析 1.1 不正规的来源 如果你使用非官方渠道获得keepass软件或某些插件,那么你的密码管理从一开始就没有安全性可言。因为这玩意是开源的啊,如果对方“很懂”,只要往里面植入一些代码,让你的数据库文件和密钥在后台…

react 项目 中 使用 Dllplugin 打包优化

webpack在build包的时候,有时候会遇到打包时间很长的问题,这里提供了一个解决方案,让打包如丝般顺滑~ 在用 Webpack 打包的时候,对于一些不经常更新的第三方库,比如 react,lodash,vue 我们希望…

C语言基础知识(37)

数组一维数组的定义:类型说明符 数组名【常量表达式】;先定义后引用;一维数组初始化时可以只对一部分元素初始化,在对全部数组元素初始化的时候可以部规定长度;但是若被定义的数组长度与提供的初始值不一样时&#xff…

【MySQL】MySQL索引夺命连环问「持续更新中」

文章目录1. 使用MySQL索引的原因2. 索引的三种常见底层数据结构以及优缺点3. 索引的常见类型以及它是如何发挥作用的?4. MyISAM 和 InnoDB 实现 B 树索引方式的区别是什么?5. InnoDB 为什么设计 B 树索引?6. 什么是覆盖索引和索引下推&#x…

【JavaSE专栏7】Java 常量、变量及其作用域

作者主页:Designer 小郑 作者简介:Java全栈软件工程师一枚,来自浙江宁波,负责开发管理公司OA项目,专注软件前后端开发(Vue、SpringBoot和微信小程序)、系统定制、远程技术指导。CSDN学院、蓝桥云…

Python论文绘图利器seaborn.lineplot

Python论文绘图利器seaborn.lineplot 提示:前言 Python论文绘图利器seaborn.lineplot 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录Python论文绘图利器seaborn.lineplot前言一、导入包二、加载数据三…

嵌入式桌面管理系统Matchbox

简介 Matchbox(中文译名;火柴盒)是X Window System的免费和开源Window Manager,它主要用于嵌入式系统。取名Matchbox,很形象的表明它只适用于屏幕只有火柴盒大小的设备。 buildroot 移植MatchBox session managermat…

高斯秩变换 RankGauss 可能是比标准化/归一化更有效的连续值特征变换方法

文章目录 一、前言二、关键原理三、总结CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 一、前言 高斯秩变换是 Kaggle 竞赛大佬 Michael Jahrer(Grandmaster) 提出的一种新颖的特征变换方法,他称之为 RankGauss。类似归一化(MinMax)和标准化(Standardization)的作用,…

帆软报表 V8 get_geo_json 任意文件读取漏洞

帆软报表 V8 get_geo_json 任意文件读取漏洞 CNVD-2018-04757 1.漏洞介绍 FineReport报表软件是一款纯Java编写的,集数据展示(报表)和数据录入(表单)功能于一身的企业级web报表工具。 FineReport v8.0版本存在任意文件读取漏洞,攻击者可利用漏洞读取网…

车载以太网 - 测试用例设计 - 头部信息检测 - 10

前面的篇幅已经把ISO 13400中DoIP软件协议规范部分进行详细的介绍说明,如果在文章中有哪些介绍的不充分或者不够详细,欢迎评论区留言讨论;接下来的文章主要介绍DoIP协议相关的测试用例设计,这也是一个测试工程师必备的重要技能之一,能否保证测试执行完成后,软件质量是达到…

超级详解洛谷P4011 孤岛营救问题(bfs超难题)(保证看懂)

题目 说明 1944 年,特种兵麦克接到国防部的命令,要求立即赶赴太平洋上的一个孤岛,营救被敌军俘虏的大兵瑞恩。瑞恩被关押在一个迷宫里,迷宫地形复杂,但幸好麦克得到了迷宫的地形图。迷宫的外形是一个长方形&#xff…

阿里“云开发“小程序(uniCould)

博主ps: 网上资料少的可怜,哎,腾讯云涨价了,论服务器,我肯定选的阿里,再着你们对比下unicould的报价就知道了,如果有钱就另当别论了。 所以这片博文,博主试过之后,先抛出…

(day8) 自学Java——拼图小游戏

GUI(图形用户接口),是指采用图形化的方式显示操作界面。 Java中包含两套完整体系:AWT包,Swing包 一.代码 package com.abc.ui;import javax.swing.*; import javax.swing.border.BevelBorder; import java.awt.event.ActionEvent; import ja…

JavaEE day5 初识CSS 2

选择器 基本选择器:id选择器、类选择器、元素选择器 复合选择器:并列选择器、子孙选择器、孩子选择器 通配符选择器 *{.....} 任意元素:书写一些全局的规则时使用,就等于是一个全局都要遵守的规则 伪类选择器:针…

Lab 3: Midterm Review

Lab3 部分questionQ5:Its Always a Good PrimeQ6:Church numeralsQ5:It’s Always a Good Prime Implement div_by_primes_under, which takes in an integer nand returns an n-divisibility checker. An n-divisibility-checker is a funct…

【蓝桥杯选拔赛真题35】python回文数升级 青少年组蓝桥杯python 选拔赛STEMA比赛真题解析

目录 python输出N除以3的商 一、题目要求 1、编程实现 2、输入输出

二叉树22:二叉搜索树中的搜索

主要是我自己刷题的一些记录过程。如果有错可以指出哦,大家一起进步。 转载代码随想录 原文链接: 代码随想录 leetcode链接:700. 二叉搜索树中的搜索 题目: 给定二叉搜索树(BST)的根节点 root 和一个整数…

变量的了解

1、普通局部变量 -------------定义形式:在{}里面定义的 普通变量 叫做 普通局部变量 -------------作用范围:所在的 {} 复合语句之间有效 -------------生命周期:所在的 {} 复合语句之间有效 -------------存储区域:栈区 ---…