本文为mybatis系列文档的第6篇,前5篇请访问下面的网址。

Mybatis Plus 为我们提供了三种设置 主键生成策略的方式。它们的优先级顺序是:局部注解 > 全局 > 默认(雪花算法)。下面我们来一一介绍

一、默认主键生成策略:雪花算法

Mybatis Plus如果不做任何主键策略配置,默认使用的是雪花算法。该策略会根据雪花算法生成主键ID,主键类型为Long或String(具体到MySQL数据库就是BIGINT和VARCHAR),该策略使用接口IdentifierGenerator的方法nextId(默认实现类为DefaultIdentifierGenerator雪花算法)

snowflake算法是Twitter开源的分布式ID生成算法,结果是一个long类型的ID 。其核心思想:使用41bit作为毫秒数,10bit作为机器的ID(5bit数据中心,5bit的机器ID),12bit作为毫秒内的流水号(意味着每个节点在每个毫秒可以产生4096个ID),最后还有一个符号位,永远是0。

二、自定义主键策略

mybatis-plus3.3.0以后,主要有五种主键生成策略。

public enum IdType {
/**
* 数据库ID自增,数据库需要支持主键自增(如MySQL),并设置主键自增
*/
AUTO(0), /**
* 该类型为未设置主键类型,默认使用雪花算法生成
*/
NONE(1), /**
* 用户输入ID,数据类型和数据库保持一致就行
* <p>该类型可以通过自己注册自动填充插件进行填充</p>
*/
INPUT(2), /* 以下3种类型、只有当插入对象ID 为空,才自动填充。 */
/**
* 全局唯一ID (idWorker),数值类型 数据库中也必须是数值类型 否则会报错
*/
ID_WORKER(3),
/**
* 全局唯一ID (UUID,不含中划线)
*/
UUID(4),
/**
* 字符串全局唯一ID (idWorker 的字符串表示),数据库也要保证一样字符类型
*/
ID_WORKER_STR(5);
}

三、局部注解配置策略

我们针对主键设置主键策略使用注解方式为

@TableId(type = IdType.AUTO)
private long userId;

四、全局配置策略

mybatis-plus:
global-config:
db-config:
id-type: auto

五、扩展使用

5.1.INPUT用户输入ID策略的用法

其中需要和大家特殊介绍的是:Input(用户输入ID),这个ID来源可以有两种

  • 用户自己设置ID,并在insert之前SET主键的值
  • 一些有序列的数据库,比如Oracle,SQLServer等,针对这些数据库我们可以通过序列填充ID字段

Mybatis-Plus 内置了如下数据库主键序列(如果内置支持不满足你的需求,可实现 IKeyGenerator 接口来进行扩展):

  • DB2KeyGenerator
  • H2KeyGenerator
  • KingbaseKeyGenerator
  • OracleKeyGenerator
  • PostgreKeyGenerator

以Oracle 的Sequence使用方法为例,使用方法如下:

首先添加@Bean

 @Bean
public OracleKeyGenerator oracleKeyGenerator(){
return new OracleKeyGenerator();
}

然后实体类配置主键 Sequence,指定主键策略为 IdType.INPUT 即可,

@Data
@KeySequence(value = "SEQ_USER" , clazz = Long.class)
public class User { @TableId(value = "ID",type = IdType.INPUT)
private Integer id;

欢迎关注我的博客,里面有很多精品合集

  • 本文转载注明出处(必须带连接,不能只转文字):字母哥博客

觉得对您有帮助的话,帮我点赞、分享!您的支持是我不竭的创作动力! 。另外,笔者最近一段时间输出了如下的精品内容,期待您的关注。

小书MybatisPlus第6篇-主键生成策略精讲的更多相关文章

  1. 小书MybatisPlus第7篇-代码生成器的原理精讲及使用方法

    本文是本系列文章的第七篇,前6篇访问地址如下: 小书MybatisPlus第1篇-整合SpringBoot快速开始增删改查 小书MybatisPlus第2篇-条件构造器的应用及总结 小书Mybatis ...

  2. 小书MybatisPlus第8篇-逻辑删除实现及API细节精讲

    本文为Mybatis Plus系列文章的第8篇,前7篇访问地址如下: 小书MybatisPlus第1篇-整合SpringBoot快速开始增删改查 小书MybatisPlus第2篇-条件构造器的应用及总 ...

  3. 小书MybatisPlus第9篇-常用字段默认值自动填充

    本文为Mybatis Plus系列文章的第9篇,前8篇访问地址如下: 小书MybatisPlus第1篇-整合SpringBoot快速开始增删改查 小书MybatisPlus第2篇-条件构造器的应用及总 ...

  4. 小书MybatisPlus第3篇-自定义SQL

    本文档为一个系列,前面章节: 小书MybatisPlus第1篇-整合SpringBoot快速开始增删改查 小书MybatisPlus第2篇-条件构造器的应用及总结 书接上回,虽然Mybatis Plu ...

  5. 小书MybatisPlus第4篇-表格分页与下拉分页查询

    本文为mybatis系列文档的第4篇,前三篇请访问下面的网址. 小书MybatisPlus第1篇-整合SpringBoot快速开始增删改查 小书MybatisPlus第2篇-条件构造器的应用及总结 小 ...

  6. 小书MybatisPlus第5篇-Active Record模式精讲

    本文为一个系列中的第五节,前四节访问如下地址: 小书MybatisPlus第1篇-整合SpringBoot快速开始增删改查 小书MybatisPlus第2篇-条件构造器的应用及总结 小书Mybatis ...

  7. Hibernate 之主键生成策略小总结

    主键生成策略大致分两种: 手工控制策略 自动生成策略[框架自动生成和数据库自动生成] 手工控制策略: assigned:类型是任意的,需要在 save() 到数据库前,编码人员手工设置主键值,也就是调 ...

  8. java框架篇---hibernate主键生成策略

    Hibernate主键生成策略 1.自动增长identity 适用于MySQL.DB2.MS SQL Server,采用数据库生成的主键,用于为long.short.int类型生成唯一标识 使用SQL ...

  9. Hibernate(4)——主键生成策略、CRUD 基础API区别的总结 和 注解的使用

    俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的知识点总结如下: hibernate的主键生成策略 UUID 配置的补充:hbm2ddl.auto属性用法 注解还是配置文件 h ...

随机推荐

  1. 【面试篇】寒冬求职之你必须要懂的Web安全

    https://segmentfault.com/a/1190000019158228 随着互联网的发展,各种Web应用变得越来越复杂,满足了用户的各种需求的同时,各种网络安全问题也接踵而至.作为前端 ...

  2. django python mange.py runserver 源码

    django python mange.py runserver 源码 入 口 mange.py文件 execute_from_command_line函数 输入参数为['manage.py', 'r ...

  3. 同步/异步/阻塞/非阻塞/BIO/NIO/AIO各种情况介绍

    常规的误区 假设有一个展示用户详情的需求,分两步,先调用一个HTTP接口拿到详情数据,然后使用适合的视图展示详情数据. 如果网速很慢,代码发起一个HTTP请求后,就卡住不动了,直到十几秒后才拿到HTT ...

  4. 手把手教你把web应用丢到服务器上(单页应用+ 服务端渲染)

    前两篇文章中,我分别介绍了框架的搭建利用vue-cli + vant搭建一个移动端开发模板,并且把项目中axios请求和vuex的用法做了简要的介绍如何在项目里管理好axios请求与vuex.在这两篇 ...

  5. Oracle Solaris 10下gdb安装(附安装包)

    文章目录 1. 背景说明 2. gdb相关包 3. gdb安装 3.1 上传资源 3.2 解压 3.3 安装 3.4 环境变量 4. 位数确认 5. 验证可用性 1. 背景说明 本文承接Oracle ...

  6. CRC循环冗余校验码

    原文转载自:https://blog.csdn.net/hm108106/article/details/73332465 1.CRC CRC循环冗余校验码是数据通信中的一种查错校验码. 循环冗余检查 ...

  7. css盒子模型的深入理解,在块级、行内元素的区别和特性

    css盒子模型用于处理元素的内容.内边距.边框和外边距的方式简称.元素框的最内部分是实际的内容,直接包围内容的是内边距.内边距呈现了元素的背景.内边距的边缘是边框.边框以外是外边距,外边距默认是透明的 ...

  8. 宁波市第三届网络安全大赛-WriteUp(Misc)

    友情链接 Web师傅:skyxmao师傅 内心OS 第一次参加这种大型比赛,实力较菜,请师傅们多多指点 Misc | 完成 | 第一 下载文件,看一下doc没有任何问题, 没有发现任何隐写,然后修改文 ...

  9. 脱壳实践之寻找OEP——两次内存断点法

      0x00 前言 对于加壳程序第一件事就是要找到OEP(oringinal Entry point),由于加壳的缘故,当PE文件载入OD或者其他调试软件时进入的的往往是壳程序的入口地址.所以要进行逆 ...

  10. JVM中栈的frames详解

    目录 简介 JVM中的栈 Frame Local Variables本地变量 Operand Stacks Dynamic Linking动态链接 方法执行完毕 简介 我们知道JVM运行时数据区域专门 ...