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 主键策略内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java简单列出文件夹下所有文件的方法

    java简单列出文件夹下所有文件的方法

    这篇文章主要介绍了java简单列出文件夹下所有文件的方法,涉及java针对文件夹遍历操作相关技巧,需要的朋友可以参考下
    2016-08-08
  • java打印指定年月的日历

    java打印指定年月的日历

    这篇文章主要为大家详细介绍了Java如何打印指定年月的日历,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • springboot项目中PropertySource如何读取yaml配置文件

    springboot项目中PropertySource如何读取yaml配置文件

    这篇文章主要介绍了springboot项目中PropertySource如何读取yaml配置文件问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • Java开发人员最常犯的5个错误总结

    Java开发人员最常犯的5个错误总结

    作为一名java开发程序员,不知道大家有没有遇到过一些匪夷所思的bug。这些错误通常需要您几个小时才能解决。今天,小编总结一些常见的编码错误,然后给出解决方案。希望大家在日常编码中能够避免这样的问题
    2022-12-12
  • 一文搞懂Java桥接方法

    一文搞懂Java桥接方法

    这篇文章主要介绍了Java中的桥接方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • 如何在不使用spring框架中使用aop的功能

    如何在不使用spring框架中使用aop的功能

    这篇文章主要介绍了如何在不使用spring框架中使用aop的功能,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • 详解Java的桥接方法

    详解Java的桥接方法

    这篇文章主要介绍了Java 桥接方法的相关资料,帮助大家更好的理解和使用Java,感兴趣的朋友可以了解下
    2020-12-12
  • Java substring方法实现原理解析

    Java substring方法实现原理解析

    这篇文章主要介绍了Java substring方法实现原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • Java正则表达式工具方法汇总

    Java正则表达式工具方法汇总

    这篇文章主要介绍了Java正则表达式工具方法汇总,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • SpringBoot中WEB的启动流程分析

    SpringBoot中WEB的启动流程分析

    今天我们就来分析下springboot启动web项目整个流程,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2022-03-03

最新评论