代码编织梦想

在使用 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) 及其他主键生成策略。在实际项目中,根据具体需求选择合适的主键生成策略,才能更好地保证数据的一致性和完整性。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39973810/article/details/138859618

MyBatisPlus中向数据库表中插入数据,MyBatisPlus中使用@TableId注解来实现自增序列id自动插入的功能-爱代码爱编程

文章目录 MyBatisPlus的@TableId注解来实现自增序列id自动插入的功能1、注解中type的值的含义2.type的值为AUTO雪花算法3.主键如果没有设置自增序列引发的一个异常 MyBatisPlus的@TableId注解来实现自增序列id自动插入的功能 这个注释主要用于对应数据库表的实体类中的主键属性。 写法:@Tab

mybatisPlus不指定@TableId(type=IdType.AUTO)时的行为-爱代码爱编程

         近期遇到了一个坑,就是在定义实体类时没有指定@TableId(type=IdType.AUTO),结果 mybatisPlus会将id的类型设为IdType.NONE         @Documented @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.FIELD,

Mybatis-plus 设置 @TableId(type = IdType.AUTO) 并没有解决自增长问题-爱代码爱编程

当我们使用mybatis-plus框架,要想实现id的自增长,需要我们在实体类id的属性上面添加@TableId(type = IdType.AUTO)注解 public class User extends Model<User> { @TableId(type = IdType.AUTO) private Long id; v

mybatisPlus主键不自增 设置@TableId(type = IdType.AUTO)后不自增问题-爱代码爱编程

问题描述 本来表里只有1 2 3 4 5 6 7 的id 新增一条记录后的ID应该是8 但是出现了很长的id 这不是想要的结果 这是因为自增的规则已经被破坏了 , 要是想用按照mysql表的自增规则, 那建表后一开始就用@TableId(type = IdType.AUTO) 来插入数据 解决办法: 把表删除, 然后重新导入, @Test

【mybatisPlus-主键自增之@TableId(value = “id“, type = IdType.AUTO)】-爱代码爱编程

mybatisPlus序列化主键id 日常吐槽–一次偶然的错,顺手记录 @Data @TableName("robot_audit_log") public class RobotAuditLog implements Serializable { private static final long serialVersionUID = 1L

mybatisplus中@tableid(type值)_似梦的苏烟的博客-爱代码爱编程

@TableId @TableId注解是专门用在主键上的注解,如果数据库中的主键字段名和实体中的属性名,不一样且不是驼峰之类的对应关系,可以在实体中表示主键的属性上加@Tableid注解,并指定@Tableid注解的value属性值为表中主键的字段名既可以对应上。 @TableId源码 package com.baomidou.mybati

mybatis plus @tableid(value = “id“,type = idtype.auto) 自增无效_dk_10032的博客-爱代码爱编程

项目场景: 提示:学习Mybatis plus: @TableId(value = "id",type = IdType.AUTO) private Integer id; 设置id 自增,使用insert 发现报错

mybatis-plus 之 @tableid(value=“xxx”,type = idtype.xxx)注解_李大宝0829的博客-爱代码爱编程

Mybatis-Plus 之 @TableId(value=“xxx”,type = IdType.xxx)注解 @TableId(value=“xxx”,type = IdType.xxx): “value”:设置

@tableid(type = idtype.auto) 自增不起效果_蠢蠢欲动的猫的博客-爱代码爱编程

65、@TableId(type = IdType.AUTO) 自增不起效果 @TableId(type = IdType.AUTO) @ApiModelProperty(value = "主键") priva

@tableid(value = “key-爱代码爱编程

问题场景 今天在单元测试模块发现了一个问题,关于一个实体类,字段添加了测试值,调用insert方法时,提示主键id未设置默认值: 原因分析 (1)首先确认了值在代码里有成功赋值,同时也比对了实体类字段和数组库字段的名

@tableid(type = idtype.auto)不生效_idtype.auto不生效-爱代码爱编程

1、前期检查 注解√ @Data public class User { @TableId(type = IdType.AUTO) private Long id; //数据库设置的是BigInt private String name; private Integer age; private String e

mybatis-爱代码爱编程

MyBatis-Plus中的@TableId注解:全面解析与实战指南 作为一名编程博客专家,我将带你深入探讨MyBatis-Plus中的@TableId注解。MyBatis-Plus是一个强大的MyBatis增强工具,旨在