Mybatis-Plus id生成策略控制

这篇具有很好参考价值的文章主要介绍了Mybatis-Plus id生成策略控制。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

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

    mybatisplus id,Mybatis-Plus,mybatis,java,数据库

  • 步骤2:运行新增方法
  • mybatisplus id,Mybatis-Plus,mybatis,java,数据库
  • mybatisplus id,Mybatis-Plus,mybatis,java,数据库
  • mybatisplus id,Mybatis-Plus,mybatis,java,数据库
  • 在使用该策略的时候一定要确保对应的数据库表设置了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

    mybatisplus id,Mybatis-Plus,mybatis,java,数据库

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

    mybatisplus id,Mybatis-Plus,mybatis,java,数据库

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

    mybatisplus id,Mybatis-Plus,mybatis,java,数据库

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

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

    mybatisplus id,Mybatis-Plus,mybatis,java,数据库

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

    mybatisplus id,Mybatis-Plus,mybatis,java,数据库

  • 步骤3:运行新增方法
  • mybatisplus id,Mybatis-Plus,mybatis,java,数据库
  • mybatisplus id,Mybatis-Plus,mybatis,java,数据库
  • ASSIGN_UUID策略

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

    mybatisplus id,Mybatis-Plus,mybatis,java,数据库

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

    mybatisplus id,Mybatis-Plus,mybatis,java,数据库

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

    mybatisplus id,Mybatis-Plus,mybatis,java,数据库

  • 步骤4:运行新增方法
  • mybatisplus id,Mybatis-Plus,mybatis,java,数据库
  • mybatisplus id,Mybatis-Plus,mybatis,java,数据库
  • 雪花算法

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

    mybatisplus id,Mybatis-Plus,mybatis,java,数据库文章来源地址https://www.toymoban.com/news/detail-836313.html

  • (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类型的数字,可以排序性能也高,但是生成的策略和服务器时间有关,如果修改了系统时间就有可能导致出现重复主键

到了这里,关于Mybatis-Plus id生成策略控制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Mybatis-Plus设置全局或者局部ID自增

    在使用Mybatis-Plus新增的时候,我们往往想要id随着数据库自增,但是如果不是我们指定id为auto(自增)的话,会通过算法算出来一个比较大的id。 这时候可以通过全局或局部的方式实现id自增 在配置文件里面添加如下配置: 这里的auto大小写无所谓,都不会影响id自增效果 我们可

    2024年02月14日
    浏览(47)
  • spring boot集成mybatis-plus——Mybatis Plus 新增数据并返回主键 ID(图文讲解)

     更新时间 2023-01-10 15:37:37 大家好,我是小哈。 本小节中,我们将学习如何通过 Mybatis Plus 框架给数据库表新增数据,主要内容思维导图如下: Mybatis Plus 新增数据思维导图 为了演示新增数据,在前面小节中,我们已经定义好了一个用于测试的用户表, 执行脚本如下: 定义一

    2024年02月02日
    浏览(55)
  • MyBatis-Plus中的更新操作(通过id更新和条件更新)

    目录 前言 一、通过id更新 二、条件更新 2.1 使用QueryWrapper进行条件更新 2.2 使用UpdateWrapper进行条件更新 总结  本文学习MP中的更新操作方法,带大家一起查看源码,了解更新操作的方法。学会熟练地去运用更新方法解决自己在项目中的问题。 Mybatis-Plus知识点[MyBatis+MyBatis-Pl

    2024年02月06日
    浏览(52)
  • 【Mybatis-Plus】mybatisplus更新时,实体字段为空,数据库不更新的解决方案

    项目技术栈:jdk (1.8) + spring boot (2.1.0) + mybatis-plus (3.5.1) 数据库: MySQL 字段类型:varchar 和 Integer 从前端传过来的数据实体字段, convertType 和 step 设为null时,使用mybatis-plus 的 updateById方法往数据库中更新时,这两个字段不更新,数据不为空可以插入。 mybatis-plus在更新的时候做

    2024年01月16日
    浏览(63)
  • Mybatis-plus 代码生成器

    1、pom.xml 2、mybatis-generator.xml 这里可以生成一个example类 什么是example类? Mybatis-Plus的代码生成器可以自动生成一些基本的代码文件,其中包括了Example(查询条件构造器)类。如下是Example类的大致解释和用法: Example类是在Mybatis-Plus中用于构建复杂条件查询的常用工具类,它是

    2024年02月01日
    浏览(84)
  • 【Mybatis-Plus】代码生成器

    目录 安装插件 数据库建表  Other Config Database Code Generator 根据创建好的数据库表,来直接生成代码   点开之后有两个功能 1.数据库配置 2.代码生成 首先点开这个配置数据库     配置完数据库后,再点击这个功能   勾选完毕之后,点击code generator   这几个包就自动生成出来

    2024年02月06日
    浏览(52)
  • MyBatis-Plus 引入依赖导致的Error creating bean和java.lang.NoClassDefFoundError: com/baomidou/mybatisplus问题

     使用mybatis-plus出现的一些问题记录。 问题错误截图 问题原因: 依赖冲突 项目主pom文件中引入了mybatis-plus-boot-start依赖,版本为 3.5.3 业务包中引入mybatis-plus代码生成器依赖版本为 3.4.1 导致mybatis-plus-core核心包存在两个版本,导致冲突   解决办法 修改业务包中mybatis-plus代码

    2024年02月09日
    浏览(53)
  • MyBatisPlus入门篇2 - 条件查询、查询投影、查询条件、id生成策略、多记录操作、逻辑删除

    目录 MyBatisPlus将书写复杂的SQL查询条件进行了封装,使用编程的形式完成查询条件的组合。 封装User模型的查询条件,这里age是具有上下限的,User类里面的age作为下限,这里的age2作为上限。 domain.query.UserQuery.java ①if语句控制 ②条件参数控制 查询结果包含模型类中的部分属性

    2024年02月09日
    浏览(41)
  • MyBatis-Plus 可视化代码生成器mybatis-plus-generator-ui

    在基于Mybatis的开发模式中,很多开发者还会选择Mybatis-Plus来辅助功能开发,以此提高开发的效率。虽然Mybatis也有代码生成的工具,但Mybatis-Plus由于在Mybatis基础上做了一些调整,因此,常规的生成工具生成的代码还有一些不太符合预期。而且对于多数据库的支持不是很好。

    2024年02月04日
    浏览(47)
  • mybatis-plus控制台打印sql(mybatis-Log)

    配置了mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl;但是mybatis执行的sql没有输出 需要检查点: 1、日志级别设置:请确保你的日志级别配置正确。如果日志级别设置得太低,可能导致SQL语句不会被打印出来。你可以尝试将日志级别调整为DEBUG或更高级别,以确

    2024年02月03日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包