一起来学Mybatis Plus(七) & 主键策略

前言

目前正在出一个Mybatis Plus系列教程, 篇幅会较多, 喜欢的话,给个关注❤️ ~

之前给大家讲过Mybatis教程,而MyBatis-Plus 是一个 MyBatis 的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。大家需要注意的是它只是一个工具,大家需要掌握和重点学习的依然是Mybatis,在熟练掌握基础的情况下使用MyBatis-Plus会达到事半功倍的效果。

好了, 废话不多说直接开整吧~

Mybatis Plus给我们提供了非常多的条件构造方法,下面一起来看下

内置主键策略

之前给大家介绍过一些内置主键类型,我们通常会使用注解的方式来指定主键生成策略

java 复制代码
@TableId(value = "id", type = IdType.AUTO)
private Long id;

mybatis-plus提供了5种策略类型

java 复制代码
public enum IdType {
    AUTO(0),
    NONE(1),
    INPUT(2),
    ASSIGN_ID(3),
    ASSIGN_UUID(4);

    private final int key;

    private IdType(int key) {
        this.key = key;
    }

    public int getKey() {
        return this.key;
    }
}

AUTO

该类型主要用于主键自增

java 复制代码
@TableId(value = "id", type = IdType.AUTO)
private Long id;

NONE

无状态策略,默认情况下不指定IdType会使用NONE策略

java 复制代码
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.ANNOTATION_TYPE})
public @interface TableId {
    String value() default "";

    IdType type() default IdType.NONE;
}
java 复制代码
@TableId(value = "id", type = IdType.NONE)
private Long id;

INPUT

主键输入策略,在插入数据库之前会自动生成id值,Mybatis -Plus已经定义好了常见的数据库主键序列,我们首先只需要在@Configuration类中定义好@BeanMybatis -Plus内置了如下数据库主键序列(如果内置支持不满足你的需求,可实现IKeyGenerator接口来进行扩展):

  • DB2KeyGenerator
  • H2KeyGenerator
  • KingbaseKeyGenerator
  • OracleKeyGenerator
  • PostgreKeyGenerator
java 复制代码
@Bean
public IKeyGenerator keyGenerator() {
    return new H2KeyGenerator();
}
java 复制代码
@TableId(value = "id", type = IdType.INPUT)
private Long id;

ASSIGN_ID

雪花算法是一种用于生成全局唯一标识符的算法,可以用于分布式系统中的唯一标识符。 如果不设置类型值,默认则使用IdType.ASSIGN_ID策略(自3.3.0起)。该策略会使用雪花算法自动生成主键ID,主键类型为长或字符串(分别对应的MySQL的表字段为BIGINT和VARCHAR)

该策略使用接口IdentifierGenerator的方法nextId以实现类为DefaultIdentifierGenerator雪花算法

java 复制代码
@TableId(value = "id", type = IdType.ASSIGN_ID)
private Long id;

ASSIGN_UUID

如果使用IdType.ASSIGN_UUID策略,并重新自动生成排除中划线的UUID作为主键。主键类型为String,对应MySQL的表分段为VARCHAR(32)

java 复制代码
@TableId(value = "id", type = IdType.ASSIGN_UUID)
private Long id;

自定义ID生成器

有时候我们会根据自己的需求来生成ID值,在SpringBoot中我们可以这么做

方式一:

java 复制代码
@Component
public class CustomIdGenerator implements IdentifierGenerator {
    @Override
    public Long nextId(Object entity) {
      	//可以将当前传入的class全类名来作为bizKey,或者提取参数来生成bizKey进行分布式Id调用生成.
      	String bizKey = entity.getClass().getName();
        //根据bizKey调用分布式ID生成
        long id = ....;
      	//返回生成的id值即可.
        return id;
    }
}

方式二:

java 复制代码
@Bean
public IdentifierGenerator idGenerator() {
    return new CustomIdGenerator();
}

方式三:

java 复制代码
@Bean
public MybatisPlusPropertiesCustomizer plusPropertiesCustomizer() {
    return plusProperties -> plusProperties.getGlobalConfig().setIdentifierGenerator(new CustomIdGenerator());
}

结束语

下节给大家介绍一些mybatis plus 插件~

本着把自己知道的都告诉大家,如果本文对有所帮助,点赞+关注鼓励一下呗~

MybatisPlus教程相关文章

往期Nginx教程相关文章

往期Docker教程相关文章

往前Shell脚本编程相关文章

往期Linux相关文章

往期面试题相关文章

项目源码(源码已更新 欢迎star⭐️)

往期设计模式相关文章

设计模式项目源码(源码已更新 欢迎star⭐️)

Kafka 专题学习

项目源码(源码已更新 欢迎star⭐️)

ElasticSearch 专题学习

项目源码(源码已更新 欢迎star⭐️)

往期并发编程内容推荐

推荐 SpringBoot & SpringCloud (源码已更新 欢迎star⭐️)

博客(阅读体验较佳)

相关推荐
灰子学技术1 小时前
go response.Body.close()导致连接异常处理
开发语言·后端·golang
老毛肚1 小时前
MyBatis体系结构与工作原理 上篇
java·mybatis
风流倜傥唐伯虎2 小时前
Spring Boot Jar包生产级启停脚本
java·运维·spring boot
Gogo8162 小时前
BigInt 与 Number 的爱恨情仇,为何大佬都劝你“能用 Number 就别用 BigInt”?
后端
fuquxiaoguang2 小时前
深入浅出:使用MDC构建SpringBoot全链路请求追踪系统
java·spring boot·后端·调用链分析
毕设源码_廖学姐3 小时前
计算机毕业设计springboot招聘系统网站 基于SpringBoot的在线人才对接平台 SpringBoot驱动的智能求职与招聘服务网
spring boot·后端·课程设计
顾北123 小时前
MCP服务端开发:图片搜索助力旅游计划
java·spring boot·dubbo
昀贝3 小时前
IDEA启动SpringBoot项目时报错:命令行过长
java·spring boot·intellij-idea
野犬寒鸦4 小时前
从零起步学习并发编程 || 第六章:ReentrantLock与synchronized 的辨析及运用
java·服务器·数据库·后端·学习·算法
indexsunny5 小时前
互联网大厂Java面试实战:Spring Boot微服务在电商场景中的应用与挑战
java·spring boot·redis·微服务·kafka·spring security·电商