小书MybatisPlus第6篇-主键生成策略精讲

本文为mybatis系列文档的第6篇,前5篇请访问下面的网址。
- 小书MybatisPlus第1篇-整合SpringBoot快速开始增删改查
- 小书MybatisPlus第2篇-条件构造器的应用及总结
- 小书MybatisPlus第3篇-自定义SQL
- 小书MybatisPlus第4篇-表格分页与下拉分页查询
- 小书MybatisPlus第5篇-Active Record模式精讲
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;
欢迎关注我的博客,里面有很多精品合集
- 本文转载注明出处(必须带连接,不能只转文字):字母哥博客。
觉得对您有帮助的话,帮我点赞、分享!您的支持是我不竭的创作动力! 。另外,笔者最近一段时间输出了如下的精品内容,期待您的关注。
- 《手摸手教你学Spring Boot2.0》
- 《Spring Security-JWT-OAuth2一本通》
- 《实战前后端分离RBAC权限管理系统》
- 《实战SpringCloud微服务从青铜到王者》
- 《VUE深入浅出系列》
小书MybatisPlus第6篇-主键生成策略精讲的更多相关文章
- 小书MybatisPlus第7篇-代码生成器的原理精讲及使用方法
本文是本系列文章的第七篇,前6篇访问地址如下: 小书MybatisPlus第1篇-整合SpringBoot快速开始增删改查 小书MybatisPlus第2篇-条件构造器的应用及总结 小书Mybatis ...
- 小书MybatisPlus第8篇-逻辑删除实现及API细节精讲
本文为Mybatis Plus系列文章的第8篇,前7篇访问地址如下: 小书MybatisPlus第1篇-整合SpringBoot快速开始增删改查 小书MybatisPlus第2篇-条件构造器的应用及总 ...
- 小书MybatisPlus第9篇-常用字段默认值自动填充
本文为Mybatis Plus系列文章的第9篇,前8篇访问地址如下: 小书MybatisPlus第1篇-整合SpringBoot快速开始增删改查 小书MybatisPlus第2篇-条件构造器的应用及总 ...
- 小书MybatisPlus第3篇-自定义SQL
本文档为一个系列,前面章节: 小书MybatisPlus第1篇-整合SpringBoot快速开始增删改查 小书MybatisPlus第2篇-条件构造器的应用及总结 书接上回,虽然Mybatis Plu ...
- 小书MybatisPlus第4篇-表格分页与下拉分页查询
本文为mybatis系列文档的第4篇,前三篇请访问下面的网址. 小书MybatisPlus第1篇-整合SpringBoot快速开始增删改查 小书MybatisPlus第2篇-条件构造器的应用及总结 小 ...
- 小书MybatisPlus第5篇-Active Record模式精讲
本文为一个系列中的第五节,前四节访问如下地址: 小书MybatisPlus第1篇-整合SpringBoot快速开始增删改查 小书MybatisPlus第2篇-条件构造器的应用及总结 小书Mybatis ...
- Hibernate 之主键生成策略小总结
主键生成策略大致分两种: 手工控制策略 自动生成策略[框架自动生成和数据库自动生成] 手工控制策略: assigned:类型是任意的,需要在 save() 到数据库前,编码人员手工设置主键值,也就是调 ...
- java框架篇---hibernate主键生成策略
Hibernate主键生成策略 1.自动增长identity 适用于MySQL.DB2.MS SQL Server,采用数据库生成的主键,用于为long.short.int类型生成唯一标识 使用SQL ...
- Hibernate(4)——主键生成策略、CRUD 基础API区别的总结 和 注解的使用
俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的知识点总结如下: hibernate的主键生成策略 UUID 配置的补充:hbm2ddl.auto属性用法 注解还是配置文件 h ...
随机推荐
- JavaWeb网上图书商城完整项目-数据库操作工具类
1.首先安装数据库,在windows上安装和在unix上面安装环境不一样,我在自己的本地电脑上安装,安装成功之后,如果使用navicat远程工具访问,需要允许mysql远程能被访问 方法二.直接授权( ...
- 7、struct2的命名空间
采用命名空间可以区分不同action下面相同的函数名称 我们来看下面的一个程序的代码 我们来看下面的代码: 添加物料的action处理类: package com.weiyuan.test; publ ...
- js语法基础入门(5.2)
5.2.循环结构 当一段代码被重复调用多次的时候,可以用循环结构来实现,就像第一个实例中出现的场景一样,需要重复询问对方是否有空,这样就可以使用循环结构来搞定 5.2.1.for循环语句 //语法结构 ...
- 在Github上建立自己的个人主页
目录 注册Github账号 登录Github账号 建立新仓库 选择个人主页的主题 注册Github账号 首先打开Github的主页(https://github.com/),点击右上角的sign up ...
- Python之浅谈多态和封装
目录 组合 什么是组合 为什么使用组合 多态和多态性 多态 什么是多态? 多态性 好处 多态性 什么是多态性 封装 封装是什么意思? 隐藏 如何用代码实现隐藏 python 实际上是可以访问隐藏属性的 ...
- Swoole 中 TCP、UDP 和长连接、短连接
TCP 服务 swoole 文档 - TCP 服务 tcp 服务端 <?php // 1. 创建 swoole 默认创建的是一个同步的阻塞tcp服务 $host = "0.0.0.0& ...
- 猿灯塔-Phaser 使用介绍
原创申明:本文由公众号[猿灯塔]原创,转载请说明出处标注 本文将介绍 java.util.concurrent.Phaser,一个常常被大家忽略的并发工具.它和 CyclicBarrier 以及 Co ...
- AspNetCore&Coding持续集成
对于现有很多持续集成工具来讲,功能越来越高级,使用了 Coding 有大半年时间,越发觉好用,特别是没钱续费服务器时,找到了新的羊毛. 一.众多持续集成工具 现在可用的持续集成工具繁多,各大云服务商都 ...
- CSS中的一些细节
一.塌陷 1.当position设置为:absolute或者fixed时,元素的display会转换为block.(设置float也会产生这样的效应)2.正常情况下,div会被内容撑开,但是如果设置了 ...
- 「疫期集训day10」玫瑰
不管我们在怎么抵抗,德国都已经败了----失守苏瓦松后绝望中的德国兵 (貌似今天的题记和内容毫无关系) 觉得以后还是不要抱怨考试失误了,感觉没啥大用 T1暴搜/状压(然俄一看题很像刚写过的二分答案,上 ...