iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >实践Mybatis-Plus主键ID生成策略
  • 238
分享到

实践Mybatis-Plus主键ID生成策略

mybatisjava数据库mysql 2023-09-03 20:09:24 238人浏览 八月长安
摘要

在3.4.3以后的版本中,mybatis-Plus默认的主键生成策略共有5种,对应枚举:IdType,分别为: IdType.AUTO(0) 数据库ID自增,该类型请确保数据库设置了 ID自增 否则无

在3.4.3以后的版本中,mybatis-Plus默认的主键生成策略共有5种,对应枚举:IdType,分别为:
IdType.AUTO(0) 数据库ID自增,该类型请确保数据库设置了 ID自增 否则无效
IdType.NONE(1) 这个是默认的类型,该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT)
IdType.INPUT(2) 用户输入ID,该类型可以通过自己注册自动填充插件进行填充
IdType.ASSIGN_ID(3) 分配ID (主键类型为number或string),默认实现类 (雪花算法)
IdType.ASSIGN_UUID(4) 分配UUID (主键类型为 string),默认实现类(UUID.replace(“-”,“”))

在3.3.0以前的版本的策略是:AUTONONEINPUTID_WORKERUUIDIDWORKER_STR这几种;
但是ID_WORKERID_WORKER_STRUUID在3.3.0之后就提示废弃,3.4.3版本就完全移除了;
ID_WORKERIDWORKER_STR建议使用为ASSIGN_IDUUID建议使用为ASSIGN_UUID

1.自增主键

(1)新建一个表,在这个表中已经设置了自增id bigint NOT NULL AUTO_INCREMENT

SET NAMES utf8mb4;SET FOREIGN_KEY_CHECKS = 0;-- ------------------------------ Table structure for t_case10_user-- ----------------------------DROP TABLE IF EXISTS `t_case10_user`;CREATE TABLE `t_case10_user`  (  `id` bigint NOT NULL AUTO_INCREMENT,  `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '名字',  PRIMARY KEY (`id`) USING BTREE) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;SET FOREIGN_KEY_CHECKS = 1;

(2)创建对应实体类,注解TableId中,type = IdType.AUTO

@Data@TableName("t_case10_user")public class TCase10User implements Serializable { {    @TableId(value = "id", type = IdType.AUTO)    private Long id;    @TableField("name")    private String name;}

(3)创建测试类,插入三条数据,一条不指定id,一条指定id为10L,另一条不指定id

@RunWith(springRunner.class)@SpringBootTest(classes = Case10Application.class)public class UserTest {    @Resource    private TCase10UserService userService;        @Test    public void testMybatisIdAUTO(){        userService.save(new TCase10User("自增user1"));        userService.save(new TCase10User("自增user2"));        userService.save(new TCase10User(10L,"自增user3"));        userService.save(new TCase10User("自增user4"));        userService.save(new TCase10User("自增user5"));    }}

场景一:字段设置AUTO(0) 数据库设置自增
执行之后的结果如下图所示,可以看出,如果没有指定id,id会从1开始递增(这个可以改),如果指定了,会使用指定的id进行插入,然后后续的会根据上一个插入的id进行递
在这里插入图片描述
场景二:字段设置AUTO(0) 数据库不设置自增
执行之后的结果如下图所示,抛出异常,无法插入数据
在这里插入图片描述

2.未指定,或者设置IdType.NONE(1)

这俩个是一样的,因为默认就是IdType.NONE(1)在源码中可以看到

@Documented@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.FIELD, ElementType.ANNOTATION_TYPE})public @interface TableId {        String value() default "";        IdType type() default IdType.NONE;}

修改注解type为IdType.NONE,或者把type这块给删了也行,现在表中的自增还在

@TableId(value = "id", type = IdType.NONE)private Long id;

执行一下TRUNCATE table t_case10_user,删除表数据,这个语句可以重置id开始的数字为1
测试方法为:

@Testpublic void testMybatisIdNONE(){    userService.save(new TCase10User("自增user1"));    userService.save(new TCase10User("自增user2"));    userService.save(new TCase10User(10L,"自增user3"));    userService.save(new TCase10User("自增user4"));    userService.save(new TCase10User("自增user5"));}

场景一:字段设置NONE(1) 数据库设置自增,与设置AUTO(0)结果一致,自增生效
在这里插入图片描述

场景二:字段设置NONE(1) 数据库不设置自增,与设置AUTO(0)结果一致
执行之后的结果如下图所示,抛出异常,无法插入数据
在这里插入图片描述

3.设置IdType.INPUT(2)

这个测试方法和IdType.NONE(1)完全一样,再两个场景下,结果也一样,不再赘述

4.设置IdType.ASSIGN_ID(3)

@TableId(value = "id", type = IdType.ASSIGN_ID)private Long id;

执行一下TRUNCATE table t_case10_user,删除表数据,这个语句可以重置id开始的数字为1
测试方法为:

@Testpublic void testMybatisIdASSIGN_ID(){    userService.save(new TCase10User("自增user1"));    userService.save(new TCase10User("自增user2"));    userService.save(new TCase10User(10L,"自增user3"));    userService.save(new TCase10User("自增user4"));    userService.save(new TCase10User("自增user5"));}

场景一:字段设置ASSIGN_ID(3) 数据库设置自增
执行结果如下图:如果id已指定,插入指定值,如果没有指定,使用雪花算法进行填充
在这里插入图片描述
场景二:字段设置ASSIGN_ID(3) 数据库不设置自增
执行结果如下图,说明字段设置ASSIGN_ID(3)之后,设置不设置自增没有影响,都是id已指定,插入指定值,如果没有指定,使用雪花算法进行填充
在这里插入图片描述
场景三:字段设置ASSIGN_ID(3) 数据库设置自增,将时间进行回拨,看看是否有时钟回拨问题
测试方法:

@Testpublic void testMybatisIdASSIGN_ID_Time(){    userService.save(new TCase10User("时钟回拨user1"));    userService.save(new TCase10User("时钟回拨user2"));}

执行结果如下图,比较一下id可以发现,最新插入的时钟回拨数据id比较小,说明时钟回拨的问题是存在的,需要自行处理这个问题
在这里插入图片描述

4.设置IdType.ASSIGN_UUID(4)

需要修改表结构,将字段id设置为varchar(32)

@TableId(value = "id", type = IdType.ASSIGN_UUID)private String id;

测试方法为:

@Testpublic void testMybatisIdASSIGN_UUID(){    userService.save(new TCase10User("自增user1"));    userService.save(new TCase10User("自增user2"));    userService.save(new TCase10User("user","自增user3"));    userService.save(new TCase10User("自增user4"));    userService.save(new TCase10User("自增user5"));}

执行结果如下图,说明如果id已指定,插入指定值,如果没有指定,使用uuid去除-后进行填充
在这里插入图片描述

来源地址:https://blog.csdn.net/lvyinxiaoqi/article/details/126469873

您可能感兴趣的文档:

--结束END--

本文标题: 实践Mybatis-Plus主键ID生成策略

本文链接: https://www.lsjlt.com/news/392807.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 实践Mybatis-Plus主键ID生成策略
    在3.4.3以后的版本中,Mybatis-Plus默认的主键生成策略共有5种,对应枚举:IdType,分别为: IdType.AUTO(0) 数据库ID自增,该类型请确保数据库设置了 ID自增 否则无...
    99+
    2023-09-03
    mybatis java 数据库 mysql
  • Mybatis-Plus主键生成策略的方法
    目录前言一、官网二、主键注解@TableId说明1、源码2、作用3、使用三、主键生成策略-IdType枚举说明1、源码2、说明3、全局设置三、ID生成器介绍1、IdentifierG...
    99+
    2022-11-13
    Mybatis-Plus主键生成策略 Mybatis-Plus主键策略
  • Mybatis-plus全局id生成策略详解
    Mybatis-plus全局id生成策略 在配置文件中加入以下代码后就不需要在实体类种的id上添加 @TableId(value = “id”, type = IdType.AUTO...
    99+
    2024-04-02
  • mybatis-plus主键策略生成失败的解决
    目录问题:分析:解决:问题: 主键生成失败,一直为0(int类型默认为0), 实体类:使用雪花算法+UUID生成主键策略 @Data public class User { ...
    99+
    2023-03-19
    mybatis-plus主键策略生成 mybatis-plus主键策略
  • Mybatis-plus全局id生成策略是什么
    这篇“Mybatis-plus全局id生成策略是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Mybatis-plus全...
    99+
    2023-06-26
  • mybatis-plus主键策略生成失败如何解决
    本篇内容介绍了“mybatis-plus主键策略生成失败如何解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!问题:主键生成失败,一直为0(...
    99+
    2023-07-05
  • Mybatis-Plus默认主键策略导致自动生成19位长度主键id的坑
    某天检查一位离职同事写的代码,发现其对应表虽然设置了AUTO_INCREMENT自增,但页面新增功能生成的数据主键id很诡异,长度达到了19位,且不是从1开始递增的—— 我检查了一...
    99+
    2024-04-02
  • 第十四章:mybatis-plus 自定义ID生成策略
    在mybatis-plus中ID生成策略主要是注解@TableId(type=IdType,XXXX)来生成,主要有以下类别 public enum IdType { AUTO(0), //数据库 ID 自增 NONE(1), //无状态,...
    99+
    2023-09-01
    mybatis java mysql
  • mybatis-plus怎么使用雪花算法ID生成策略
    本篇内容介绍了“mybatis-plus怎么使用雪花算法ID生成策略”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!mybatis-plus ...
    99+
    2023-06-21
  • mybatis-plus 如何使用雪花算法ID生成策略
    目录mybatis-plus 可以通过@TableId注解指定主键生成策略看一下源码大概找一下雪花算法的实现方式自定义ID生成器实现Mybatis-plus 中生成雪花算法id的工具...
    99+
    2024-04-02
  • MyBatis Plus主键设置策略是什么
    这篇文章主要介绍了MyBatis Plus主键设置策略是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MyBatis Plus主键设置策略是什么文章都会有所收获,下面我们一起来看看吧。根...
    99+
    2023-07-02
  • ID生成策略——SnowFlake
    一、遇到问题某个项目采用了数据库(MySQL)自增ID作为主要业务数据的主键。数据库自增ID使用简单,自动编号,速度快,而且是增量增长,按顺序存放,对于检索非常有利。单库环境下,数据库自增ID问题不大。但在...
    99+
    2024-04-02
  • Mybatis-Plus使用ID_WORKER生成主键id重复的解决方法
    目录问题描述问题分析问题解决问题描述 目前项目使用的id是mybatis-plus 内置的主键生成策略 ID_WORKER ,最近测试在做性能压测,部署架构是单服务集群的部署方式,然...
    99+
    2024-04-02
  • MyBatisPlus之id生成策略的方法
    目录一、为什么需要选择不同的id生成策略二、如何使用MP的id生成策略 AUTONONEINPUTASSIGN_IDASSIGN_UUID一、为什么需要选择不同的id生成策...
    99+
    2023-03-19
    MyBatisPlus id生成策略 MyBatisPlus 生成策略
  • spring boot集成mybatis-plus——Mybatis Plus 新增数据并返回主键 ID(图文讲解)
    Mybatis Plus 新增数据并返回主键 ID(图文讲解)  更新时间 2023-01-10 15:37:37 大家好,我是小哈。 本小节中,我们将学习如何通过 Mybatis Plus 框架给数据库表新增数据,...
    99+
    2023-09-03
    mybatis spring boot java spring mysql
  • MyBatisPlus之id生成策略怎么使用
    这篇文章主要介绍“MyBatisPlus之id生成策略怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“MyBatisPlus之id生成策略怎么使用”文章能帮助大家解决问题。一、为什么需要选择不...
    99+
    2023-07-05
  • JPA 注解及主键生成策略使用指南
    JPA 注解 Entity 常用注解 参考:JPA & Spring Data JPA学习与使用小记 指定对象与数据库字段映射时注解的位置:如@Id、@Column等注解指定Entity的字段与数据库字段对应关系时,注解的位置可以在Fiel...
    99+
    2023-08-16
    java jpa spring data jpa
  • MyBatis如何获取数据库自生成的主键Id
    这篇文章将为大家详细讲解有关MyBatis如何获取数据库自生成的主键Id,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。MyBatis获取数据...
    99+
    2024-04-02
  • mybatis-plus雪花算法生成Id使用详解
    目录前言一、mybatis-plus官网二、雪花算法实战三、实现分析四、为什么默认就是雪花算法五、主动设置Id生成策略总结前言 在实际开发过程中,数据库自增主键生成Id能满足大部分的...
    99+
    2024-04-02
  • mybatis主键自增策略如何设置
    在MyBatis中,可以通过使用自动生成主键的方式来实现主键自增的策略。通常情况下,有两种方式可以实现主键自增: 使用数据库的自增...
    99+
    2024-04-08
    mybatis
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作