MyBatisPlus 主键策略的实现(4种)

 更新时间:2023年10月07日 09:22:30   作者:宋冠巡  
MyBatis Plus 集成了多种主键策略,帮助用户快速生成主键,本文主要介绍了MyBatisPlus主键策略的实现,具有一定的参考价值,感兴趣的可以了解一下

说明

MyBatis Plus 集成了多种主键策略,帮助用户快速生成主键。

  • 雪花算法ID(默认策略)(推荐)
  • UUID
  • 自增ID
  • 用户输入ID(必须用户每次插入数据时,手动传入ID)

雪花算法ID:IdType.ASSIGN_ID(推荐)

默认情况,全局使用的,就是雪花算法ID。也就是说,id字段在没有指定任何主键策略时,插入数据就是使用的雪花算法生成的ID。

注解

如果全局使用雪花算法ID,这个注解可以不加。

@TableId(type = IdType.ASSIGN_ID)

代码

package com.example.web.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
@Data
public class User {
    @TableId(type = IdType.ASSIGN_ID)
    private Long id;
    private String name;
    private Integer age;
    private String email;
}
    @Test
    public void insert() {
        User user = new User();
        user.setName("赵一");
        user.setAge(26);
        user.setEmail("zhaoyi@example.com");
        mapper.insert(user);
    }

效果

UUID:IdType.ASSIGN_UUID

注解

@TableId(type = IdType.ASSIGN_UUID)

代码

package com.example.web.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
@Data
public class User {
    @TableId(type = IdType.ASSIGN_UUID)
    private Long id;
    private String name;
    private Integer age;
    private String email;
}
    @Test
    public void insert() {
        User user = new User();
        user.setName("赵一");
        user.setAge(26);
        user.setEmail("zhaoyi@example.com");
        mapper.insert(user);
    }

效果

自增ID:IdType.AUTO

该类型请确保数据库设置了 ID自增,否则无效(会报错)。

报错信息查看文章最后的《报错示例》

注解

@TableId(type = IdType.AUTO)

代码与测试

package com.example.web.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
@Data
public class User {
    @TableId(type = IdType.AUTO)
    private Long id;
    private String name;
    private Integer age;
    private String email;
}
    @Test
    public void insert() {
        User user = new User();
        user.setName("赵一");
        user.setAge(26);
        user.setEmail("zhaoyi@example.com");
        mapper.insert(user);
    }

效果

用户输入ID:IdType.INPUT

注解

@TableId(type = IdType.INPUT)

代码

package com.example.web.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
@Data
public class User {
    @TableId(type = IdType.INPUT)
    private Long id;
    private String name;
    private Integer age;
    private String email;
}
    @Test
    public void insert() {
        User user = new User();
        user.setId(9L);
        user.setName("赵一");
        user.setAge(26);
        user.setEmail("zhaoyi@example.com");
        mapper.insert(user);
    }

效果

指定id之后,插入数据成功

未指定ID报错

如果不指定id,也就是 setId() 方法没调用,会报错:

Column ‘id’ cannot be null

补充:报错示例(IdType.AUTO)

当 MySQL 数据库中的表,ID并没有自增,但是代码中的id是自增,此时新增一条数据,会报错。

实体类

package com.example.web.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
@Data
public class User {
    @TableId(type = IdType.AUTO)
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

插入数据方法

    @Test
    public void insert() {
        User user = new User();
        user.setName("赵一");
        user.setAge(26);
        user.setEmail("zhaoyi@example.com");
        mapper.insert(user);
    }

报错信息

到此这篇关于MyBatisPlus 主键策略的实现(4种)的文章就介绍到这了,更多相关MyBatisPlus 主键策略内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 轻松学会使用JavaMail API发送邮件

    轻松学会使用JavaMail API发送邮件

    想要轻松学会使用JavaMail API发送邮件吗?本指南将带你快速掌握这一技能,让你能够轻松发送电子邮件,无论是个人还是工作需求,跟着我们的步骤,很快你就可以在Java应用程序中自如地处理邮件通信了!
    2023-12-12
  • 部署springboot项目读取外部配置文件实现过程

    部署springboot项目读取外部配置文件实现过程

    本文介绍了Spring Boot项目如何读取外部配置文件,以实现应用与配置分离,主要通过将配置文件放在jar包的同级目录中,或通过启动命令指定配置文件路径等方式实现,这种方法可以避免每次部署时修改配置文件的麻烦
    2026-04-04
  • 基于数据库的用户认证实现SpringBoot3整合SpringSecurity6的过程

    基于数据库的用户认证实现SpringBoot3整合SpringSecurity6的过程

    这篇文章主要介绍了基于数据库的用户认证实现SpringBoot3整合SpringSecurity6的过程,本文通过实例图文并茂的形式给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2025-05-05
  • Mybatis 自定义类型处理器示例详解

    Mybatis 自定义类型处理器示例详解

    在某些情况下我们需要对类型做处理,例如数据存储的是Long,程序里是BigDecimal,那么我们出库入库都需要做处理,此时就可以使用类型处理器,本文通过示例给大家介绍Mybatis 自定义类型处理器的相关知识,感兴趣的朋友跟随小编一起看看吧
    2023-10-10
  • springboot读取resource配置文件生成容器对象的示例代码

    springboot读取resource配置文件生成容器对象的示例代码

    这篇文章主要介绍了springboot读取resource配置文件生成容器对象的示例代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • java为什么需要虚拟机jvm原理详解

    java为什么需要虚拟机jvm原理详解

    这篇文章主要为大家介绍了java为什么需要虚拟机jvm的原理详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2021-11-11
  • jdk7 中HashMap的知识点总结

    jdk7 中HashMap的知识点总结

    HashMap的原理是老生常谈了,不作仔细解说。一句话概括为HashMap是一个散列表,它存储的内容是键值对(key-value)映射。这篇文章主要总结了关于jdk7 中HashMap的知识点,需要的朋友可以参考借鉴,一起来看看吧。
    2017-01-01
  • transactionAttributes各属性意义及配置

    transactionAttributes各属性意义及配置

    这篇文章主要介绍了transactionAttributes各属性意义及配置,具有一定参考价值,需要的朋友可以了解下。
    2017-09-09
  • 一文详解Java中的动态填充Html模版并转PDF

    一文详解Java中的动态填充Html模版并转PDF

    在后端技术中,模板引擎和PDF生成工具是两个非常重要的领域,Thymeleaf和wkhtmltopdf是这两个领域的杰出代表,下面就来详细介绍一下Thymeleaf和wkhtmltopdf的技术特点吧
    2023-12-12
  • Jenkins build记录清理,释放磁盘空间方式

    Jenkins build记录清理,释放磁盘空间方式

    Jenkins构建记录会占用大量磁盘空间,需要定期清理,可以通过JenkinsJob配置中的“丢弃旧的构建”(DiscardOldBuilds)来清理
    2025-11-11

最新评论