深入理解 `@TableId(type = IdType.AUTO)`:使用方法及其与其他主键生成策略的区别

embedded/2024/10/4 19:35:45/

在使用 MyBatis-Plus 进行数据库操作时,主键生成策略是一个重要的概念。MyBatis-Plus 提供了多种主键生成策略,通过注解 @TableId 来配置,其中 IdType.AUTO 是最常用的一种。本文将详细介绍 @TableId(type = IdType.AUTO) 的使用方法,特别是当主键字段不是 id 时如何指定,并与其他主键生成策略进行比较。

一、@TableId(type = IdType.AUTO) 介绍

@TableId 是 MyBatis-Plus 用于标识数据库表主键字段的注解。IdType.AUTO 是其中的一种主键生成策略,表示数据库表的主键字段采用自增策略,即由数据库自动生成主键值。

使用方法

  1. 基本用法

    @TableId(type = IdType.AUTO)
    private Long id;
    

    上述代码表示字段 id 是自增主键,由数据库自动生成值。

  2. id 字段作为主键

    当主键字段不是 id 时,可以使用 @TableId 指定主键字段,并且设置其类型为 AUTO

    @TableId(value = "custom_id", type = IdType.AUTO)
    private Long customId;
    

    这里的 value 参数指定了主键字段的名称 custom_id,同时设置 typeIdType.AUTO 表示自增主键。

适用场景

IdType.AUTO 适用于主键值由数据库自动生成的场景,通常是在数据库表设计中主键字段被设置为自增。

二、与其他主键生成策略的区别

MyBatis-Plus 提供了多种主键生成策略,通过 IdType 枚举来配置。以下是 IdType.AUTO 与其他几种常用策略的比较:

1. IdType.NONE

  • 描述:未设置主键生成策略,默认由数据库自行处理。

  • 使用方法

    @TableId(type = IdType.NONE)
    private Long id;
    
  • 适用场景:主键值在插入数据时明确指定,由应用程序或数据库触发器等负责生成。

2. IdType.INPUT

  • 描述:手动输入,由用户在插入数据时指定主键值。

  • 使用方法

    @TableId(type = IdType.INPUT)
    private Long id;
    
  • 适用场景:适用于主键由外部系统或用户输入的情况,例如业务上需要指定特定的主键值。

3. IdType.ID_WORKERIdType.ID_WORKER_STR

  • 描述:使用分布式主键生成器生成全局唯一 ID,前者生成数字类型,后者生成字符串类型。

  • 使用方法

    @TableId(type = IdType.ID_WORKER)
    private Long id;@TableId(type = IdType.ID_WORKER_STR)
    private String id;
    
  • 适用场景:适用于分布式系统,要求主键全局唯一且无冲突,例如分布式数据库或微服务架构下的数据存储。

4. IdType.UUID

  • 描述:生成 32 位 UUID 字符串作为主键。

  • 使用方法

    @TableId(type = IdType.UUID)
    private String id;
    
  • 适用场景:适用于需要字符串类型主键且要求全局唯一的场景,例如一些特定业务需要用 UUID 作为标识符。

5. IdType.ASSIGN_ID

  • 描述:雪花算法生成的 19 位数字类型主键。

  • 使用方法

    @TableId(type = IdType.ASSIGN_ID)
    private Long id;
    
  • 适用场景:与 IdType.ID_WORKER 类似,适用于分布式系统需要全局唯一主键的情况。

6. IdType.ASSIGN_UUID

  • 描述:生成 32 位 UUID 字符串作为主键,与 IdType.UUID 类似,但使用不同的生成算法。

  • 使用方法

    @TableId(type = IdType.ASSIGN_UUID)
    private String id;
    
  • 适用场景:同 IdType.UUID,适用于需要字符串类型主键且要求全局唯一的场景。

三、总结

在使用 MyBatis-Plus 时,选择适当的主键生成策略是非常重要的。@TableId(type = IdType.AUTO) 适用于主键由数据库自动生成的场景,特别是在数据库设计中主键字段设置为自增时非常方便。而其他主键生成策略则适用于不同的业务需求,例如分布式系统、需要手动指定主键等。

希望本文能帮助你更好地理解和使用 @TableId(type = IdType.AUTO) 及其他主键生成策略。在实际项目中,根据具体需求选择合适的主键生成策略,才能更好地保证数据的一致性和完整性。


http://www.ppmy.cn/embedded/41356.html

相关文章

python中几种推导式简单样例

目录 一、python中几种推导式 1.1 列表推导式: 1.2 字典推导式 1.3 生成器表达式: 1.4 条件表达式: 二、简化对多个列表的并行迭代函数: 一、python中几种推导式 1.1 列表推导式: 使用列表推导式可以简化对列表…

独立游戏《星尘异变》UE5 C++程序开发日志3——实现一个存存组件

本篇日志中,我将会介绍如何实现一个有格子,每个格子有容量的物品库存,如下图: 一.库存容器 1.储存数据的容器 库存容器最重要的目的就是存储每一种类的物品拥有的数量,这里我用的是哈希表: std::unordere…

如何使用ArcGIS Pro进行选房分析

无论是研究城市规划布局还是寻找理想的住房,都需要综合考虑购物、医疗、教育和休闲等多方面因素,此时我们的GIS软件就可以派上用场了,这里为大家介绍一下如何使用 ArcGIS Pro 进行选房分析,希望能对你有所帮助。 数据来源 教程所…

设计模式——迭代器模式(Iterator)

迭代器模式(Iterator Pattern)是一种行为设计模式,它使得我们能够顺序地访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。迭代器模式为遍历不同的聚合结构提供了一个统一的接口,使得客户端代码可以独立…

桥接模式类图与代码

欲开发一个绘图软件,要求使用不同的绘图程序绘制不同的图形。以绘制直线和圆形为例,对应的绘图程序如表 7.7 所示。 根据绘图软件的扩展性要求,该绘图软件将不断扩充新的图形和新的绘图程序。为了避免出现类爆炸的情况,现采用桥接…

steam商店打不开、steam商店错误代码-118的解决方法

现在steam已经开始了,有很多好玩的游戏都在这段时间相继打折,虽然游戏众多,但是不是所有人都能把这些游戏都买下来,有一些小伙伴喜欢的游戏苦于没有足够的资本去购买,steam会以各种名义举办特惠活动吸引玩家们&#xf…

LangChain 核心模块学习 模型输入 Prompts

模型输入 Prompts 一个语言模型的提示是用户提供的一组指令或输入,用于引导模型的响应,帮助它理解上下文并生成相关和连贯的基于语言的输出,例如回答问题、完成句子或进行对话。 提示模板(Prompt Templates)&#xf…

基于单片机的医用辅助器械简析

摘 要:单片机在医用辅助器械中用途广泛,传感装置与单片机控制系统相结合可设计出满足更多需求的医用辅助器械。本文主要探究不同传感装置与单片机结合的优缺点,先从分析医用辅助器械的工作原理入手,说明传感装置的作用&#xff0…