一起来学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⭐️)

博客(阅读体验较佳)

相关推荐
计算机毕业设计小帅11 分钟前
【2026计算机毕业设计】基于Springboot的校园电动车短租平台
spring boot·后端·课程设计
调试人生的显微镜11 分钟前
Web前端开发工具实战指南 从开发到调试的完整提效方案
后端
Java水解12 分钟前
【SQL】MySQL中空值处理COALESCE函数
后端·mysql
Python私教20 分钟前
DRF:Django REST Framework框架介绍
后端·python·django
间彧22 分钟前
Java HashMap如何合理指定初始容量
后端
用户40993225021235 分钟前
PostgreSQL全表扫描慢到崩溃?建索引+改查询+更统计信息三招能破?
后端·ai编程·trae
PFinal社区_南丞43 分钟前
PostgreSQL-10个鲜为人知的强大功能
数据库·后端
superlls1 小时前
(Spring)Spring Boot 中 @Valid 与全局异常处理器的联系详解
java·spring boot·后端
0110_10241 小时前
tauri + rust的环境搭建---初始化以及构建
开发语言·后端·rust
文心快码BaiduComate1 小时前
限时集福!Comate挂件/皮肤上线,符(福)气掉落中~
前端·后端·程序员