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

博客(阅读体验较佳)

相关推荐
码农BookSea10 小时前
10分钟掌握 JSON-RPC 协议,面试加分、设计不踩坑
后端
小哇66610 小时前
MybatisPlus-JSON类型处理器 存取 数据库的JSON 字段数据
mybatis
凤年徐11 小时前
C++手撕红黑树:从0到200行,拿下STL map底层核心
c++·后端·算法
IT_陈寒11 小时前
Python的列表推导式里藏了个坑,差点让我加班到凌晨
前端·人工智能·后端
递归尽头是星辰11 小时前
Spring Boot 配置排除失效深度解析:时序与机制核心
spring boot·自动配置·bean 加载·exclude失效·组件扫描
卷无止境12 小时前
podman与docker的区别和生产环境最佳实践
后端
程途知微12 小时前
ConcurrentHashMap线程安全实现原理全解析
java·后端
Mars酱12 小时前
1分钟编写贪吃蛇 | JSnake贪吃蛇单机版
java·后端·开源
卷卷说风控12 小时前
养了10年风控,今年开始养「虾」了
后端
王码码203512 小时前
Go语言中的Elasticsearch操作:olivere实战
后端·golang·go·接口