Mybatis-plus全局id生成策略详解

Mybatis-plus全局id生成策略

在配置文件中加入以下代码后就不需要在实体类种的id上添加

@TableId(value = “id”, type = IdType.AUTO)
mybatis-plus:
  global-config:
    db-config:
      id-type: auto #设置主键自动生成策略(全局id生成策略)

Mybatis-plus6种主键生成策略小结

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

直接在实体类的主键字段加注解配置使用哪一种策略

举例:

@TableId(type = IdType.ID_WORKER_STR)
    private String id;

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

时间: 2022-01-12

Mybatisplus主键生成策略算法解析

mybatisplus支持多种主键生成策略,默认采用认 ID_WORKER 即雪花算法 雪花算法 snowflflake是Twitter开源的分布式ID生成算法,结果是一个long型的ID.其核心思想是:使用41bit作为毫秒数,10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID),12bit作为毫秒内的流水号(意味着每个节点在每毫秒可以产生 4096 个 ID),最后还有一个符号位,永远是0.可以保证几乎全球唯一! mybatisplus默认主键生成策略有可能会和我们的数据库

mybatis-plus主键生成策略

MP 支持多种主键策略 默认是推特的"" 雪花算法"" ,也可以设置其他策略下面我演示主键策略使用 MP的主键定义在一个一个枚举类中 源码如下 public enum IdType { AUTO(0),//数据库自增 依赖数据库 NONE(1),// 表示该类型未甚至主键类型 (如果没有主键策略)默认根据雪花算法生成 INPUT(2),//用户输入ID(该类型可以通过自己注册填充插件进行填充) //下面这三种类型,只有当插入对象id为空时 才会自动填充. ID_WO

mybatis-plus 如何使用雪花算法ID生成策略

目录 mybatis-plus 可以通过@TableId注解指定主键生成策略 看一下源码大概找一下雪花算法的实现方式 自定义ID生成器实现 Mybatis-plus 中生成雪花算法id的工具类 mybatis-plus 可以通过@TableId注解指定主键生成策略 @TableId(value="id",type=IdType.ASSIGN_ID) 值 描述 AUTO 数据库ID自增 NONE 无状态,该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT) INPUT

Java实现雪花算法(snowflake)

本文主要介绍了Java实现雪花算法(snowflake),分享给大家,具体如下: 简单描述 最高位是符号位,始终为0,不可用. 41位的时间序列,精确到毫秒级,41位的长度可以使用69年.时间位还有一个很重要的作用是可以根据时间进行排序.注意,41位时间截不是存储当前时间的时间截,而是存储时间截的差值(当前时间截 - 开始时间截) 后得到的值,这里的的开始时间截,一般是我们的id生成器开始使用的时间,由我们程序来指定的(如下下面程序SnowFlake类的START_STMP属性).41位的时间截

基于python实现雪花算法过程详解

这篇文章主要介绍了基于python实现雪花算法过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Snowflake是Twitter提出来的一个算法,其目的是生成一个64bit的整数: 1bit:一般是符号位,不做处理 41bit:用来记录时间戳,这里可以记录69年,如果设置好起始时间比如今年是2018年,那么可以用到2089年,到时候怎么办?要是这个系统能用69年,我相信这个系统早都重构了好多次了. 10bit:10bit用来记录机器ID

利用mysql实现的雪花算法案例

一.为何要用雪花算法 1.问题产生的背景 现如今越来越多的公司都在用分布式.微服务,那么对应的就会针对不同的服务进行数据库拆分,然后当数据量上来的时候也会进行分表,那么随之而来的就是分表以后id的问题. 例如之前单体项目中一个表中的数据主键id都是自增的,mysql是利用autoincrement来实现自增,而oracle是利用序列来实现的,但是当单表数据量上来以后就要进行水平分表,阿里java开发建议是单表大于500w的时候就要分表,但是具体还是得看业务,如果索引用的号的话,单表千万的数据也是

使用Mybatis Generator结合Ant脚本快速自动生成Model、Mapper等文件的方法

MyBatis简介: MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录. 相关阅读:MyBatis入门学习教程(一)-MyBatis快速入门 使用过Mybatis的同学都知道,针对每一个项目中使用到的数据库表都需要建

Mybatis基于注解形式的sql语句生成实例代码

对其做了些优化,但此种sql生成方式仅适用于复杂程度不高的sql,所以实用性不是很高,仅仅是写着玩的,知道点mybatis的注解形式的使用方式,可能以后会逐渐完善起来.第一次写博客,写的简单点. package com.bob.config.mvc.mybatis; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retenti

PHP实现RSA加解密算法示例(生成密钥位数为1024位的方法)

大家可以先到http://web.chacuo.net/netrsakeypair这个网站,在线生成公钥和私钥 RSA非对称加密算法,如果是公钥加密,就得用私钥解密,反过来也一样,私钥加密的就用公钥解密,以下是相关实现函数 /** * RSA私钥加密 * @param string $private_key 私钥 * @param string $data 要加密的字符串 * @return string $encrypted 返回加密后的字符串 * @author mosishu */ fun

mybatis插入与批量插入返回ID的原理详解

背景 最近正在整理之前基于mybatis的半ORM框架.原本的框架底层类ORM操作是通过StringBuilder的append拼接的,这次打算用JsqlParser重写一遍,一来底层不会存在太多的文本拼接,二来基于其他开源包维护难度会小一些,最后还可以整理一下原有的冗余方法. 这两天整理insert相关的方法,在将对象插入数据库后,期望是要返回完整对象,并且包含实际的数据库id. 基础相关框架为:spring.mybatis.hikari. 底层调用方法 最底层的做法实际上很直白,就是利用my

Mysql全局ID生成方法

生产系统随着业务增长总会经历一个业务量由小变大的过程,可扩展性是考量数据库系统高可用性的一个重要指标;在单表/数据库数据量过大,更新量不断飙涨时,MySQL DBA往往会对业务系统提出sharding的方案.既然要sharding,那么不可避免的要讨论到sharding key问题,在有些业务系统中,必须保证sharding key全局唯一,比如存放商品的数据库等,那么如何生成全局唯一的ID呢,下文将从DBA的角度介绍几种常见的方案. 1.使用CAS思想 什么是CAS协议 Memcached于1

java数据库唯一id生成工具类

本文实例为大家分享了java数据库唯一id生成工具类的具体代码,供大家参考,具体内容如下 import java.io.File; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Map; import java.util.Random; import java.util.UUID; import org.springframework.dao.EmptyResultDataAccessExce

java唯一字符串ID生成方案详解

工作中经常会有生成唯一字符串的需求.通常最容易想到的是UUID.UUID的唯一性毋庸置疑,但是32位的长度也容易让人退避三舍.也曾经想过参考<短网址生成方案>来生成一串ID,但是试验了一下发现唯一性不太好. 最终采用的方案是时钟方案,简单来说就是用当前时间戳做唯一ID. 采用时间戳做ID,秒或毫秒都容易产生重复,换成纳秒在单节点上就没问题了.参考百度百科关于纳秒的描述就能清楚为什么纳秒级别的时间戳不会产生重复: 光在真空中一纳秒仅传播0.3米.个人电脑的微处理器执行一道指令(如将两数相加)约需