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

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

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

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

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

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

2、自定义主键策略

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);
}

3、局部注解配置策略

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

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

4、全局配置策略

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

5、扩展使用

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

其中须要和你们特殊介绍的是:Input(用户输入ID),这个ID来源能够有两种sql

  • 用户本身设置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 便可,springboot

@Data
@KeySequence(value = "SEQ_USER" , clazz = Long.class)
public class User {

    @TableId(value = "ID",type = IdType.INPUT)
    private Integer id;

欢迎关注个人博客,里面有不少精品合集

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

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

相关文章
相关标签/搜索