mybatis plus 主键策略
博主原创,转载请注明出处:
mybatis plus 对实体类映射表的主键做了注解支持,该注解为 @TableId ,如果不使用该注解,mybatis plus 默认主键生成的策略是内部封装的雪花算法。
@TableId 注解定义的代码如下:
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})
public @interface TableId {
String value() default ""; IdType type() default IdType.NONE;
}
其中 type 为 id 生成的策略类型,其支持的 id 生成策略如下:
public enum IdType {
AUTO(0), // 数据库id自增
NONE(1), // 未设置主键
INPUT(2), // 手动输入
ID_WORKER(3), // 只有当插入对象ID 为空,才自动填充,默认的方式,全局唯一id
UUID(4), // 只有当插入对象ID 为空,才自动填充,全局唯一id uuid
ID_WORKER_STR(5); //只有当插入对象ID 为空,才自动填充,ID_WORKER 字符串表示法
private final int key;
private IdType(int key) {
this.key = key;
}
public int getKey() {
return this.key;
}
}
项目中可进行 test 测试,项目框架的搭建以及实体类,测试类的封装可以看上一篇文章:
搭建 spring boot + mybatis plus 项目框架并进行调试
实体类对 id 不添加 @TableId的注解:
CREATE TABLE `user` (
`id` bigint(20) NOT NULL COMMENT '主键ID',
`name` varchar(30) DEFAULT NULL COMMENT '姓名',
`age` int(11) DEFAULT NULL COMMENT '年龄',
`email` varchar(50) DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
@Data
@Table(name = "user")
public class User { @TableId(type = IdType.AUTO)
private Long id; private String name; private int age; private String email;
}
测试test为:
@Test
void save() {
User user = new User();
user.setAge(23);
user.setEmail("344");
user.setName("test");
userService.save(user);
log.error("------------------{}", JSON.toJSONString(user));
}
插入数据库的数据如下:
{"age":23,"email":"344","id":1352980660057944066,"name":"test"}
这里生成 id 是有mybatis plus 封装的 IdWorker 的泪生成。

如果项目中有需要uuid 也可以直接使用其中的方法进行直接获取。
2.设置 id 为自增长类型:
修改数据库表id为主键自增长:

继续使用之前的test进行添加测试:
打印的添加成功的数据为:
{"age":23,"email":"344","id":1352980660057944067,"name":"test"}
mybatis plus 主键策略的更多相关文章
- 主键策略+mybayisPlus自动增长
主键策略: 1.自动增长 有一点小缺陷:例如当一张表里的数据过于庞大时我们会进行分表操作,若是用自动增长策略,那么除了第一张表外的每一张表都必须知道上一张的表的的最后ID值.这个操作便会造成效率的变低 ...
- JPA主键策略
JPA 自带的主键策略有 4 种,在枚举 javax.persistence.GenerationType 中,分别是:TABLE.SEQUENCE.IDENTITY.AUTO. TABLE:通过表产 ...
- MyBatis返回主键,MyBatis Insert操作返回主键
MyBatis返回主键,MyBatis Insert操作返回主键 >>>>>>>>>>>>>>>>> ...
- MyBatis中主键回填的两种实现方式
主键回填其实是一个非常常见的需求,特别是在数据添加的过程中,我们经常需要添加完数据之后,需要获取刚刚添加的数据 id,无论是 Jdbc 还是各种各样的数据库框架都对此提供了相关的支持,本文我就来和和大 ...
- Spring boot JPA 用自定义主键策略 生成自定义主键ID
最近学习Spring boot JPA 学习过程解决的一些问题写成随笔,大家一起成长.这次遇到自定义主键的问题 package javax.persistence; public enum Gener ...
- MP支持的主键策略
MP 支持多种主键策略 默认是推特的“” 雪花算法“” ,也可以设置其他策略下面我演示主键策略使用 MP的主键定义在一个一个枚举类中 源码如下 public enum IdType { AUTO(0) ...
- MyBatis 示例-主键回填
测试类:com.yjw.demo.PrimaryKeyTest 自增长列 数据库表的主键为自增长列,在写业务代码的时候,经常需要在表中新增一条数据后,能获得这条数据的主键 ID,MyBatis 提供了 ...
- Mybatis-Plus默认主键策略导致自动生成19位长度主键id的坑
原创/朱季谦 某天检查一位离职同事写的代码,发现其对应表虽然设置了AUTO_INCREMENT自增,但页面新增功能生成的数据主键id很诡异,长度达到了19位,且不是从1开始递增的-- 我检查了一下,发 ...
- MybatisPlus生成主键策略方法
MybatisPlus生成主键策略方法 全局id生成策略[因为是全局id所以不推荐] SpringBoot集成Mybatis-Plus 在yaml配置文件中添加MP配置 mybatis-plus: g ...
- hibernate(2) —— 主键策略
框架提供了三种主键生成方式,一种是由用户自己维护,一种是由hibernate框架维护,另一种是由数据库维护. 自己维护就是在插入数据的时候,一定要指定主键的值,否则会出错,如果由框架维护和由数据库维护 ...
随机推荐
- 如何实现CesiumJS的视效升级?
CesiumJS作为一款强大的地理可视化引擎,为我们提供了丰富的地球数据可视化和交互展示的能力.然而,随着用户需求的不断增加和技术的不断进步,如何进一步提升CesiumJS的视觉效果成为了一个重要的问 ...
- Python subprocess 使用(二)
Python subprocess 使用(二) 本篇继续介绍subprocess的使用. 这里主要添加两个自己在工作过程中常用的两个小命令. 1: 获取顶层activity import subpro ...
- Gateway:Spring Cloud API网关组件
Gateway:Spring Cloud API网关组件 问题总结 API网关? Spring Cloud Gateway? GateWay的工作流程?(重点) Predicate断言? Filter ...
- reboot详解
linux下reboot命令详解 linux reboot 命令详解 功能说明:重新开机. 语 法:dreboot [-dfinw] 补充说明:执行reboot指令可让系统停止运作,并重新开机. 参 ...
- Spring Boot 导出EXCEL模板以及导入EXCEL数据(阿里Easy Excel实战)
Spring Boot 导出EXCEL模板以及导入EXCEL数据(阿里Easy Excel实战) 导入pom依赖 编写导出模板 @ApiOperation("导出xxx模板") @ ...
- Volcano:带你体验容器与批量计算的碰撞的火花
摘要:今年(2020)7月初,Volcano 发布了1.0版本.1.0做为里程碑版本,在Volcano整个规划中起到了承上启下的作用.此次发布的1.0版本支持了GPU共享,作业动态扩缩容,批任务抢占等 ...
- 物联网通信技术最全科普!你一定要了解的NB-IoT
摘要: NB-IoT(窄带蜂窝物联网)产业正在迅速崛起. 我们这一期的文章主要是普及一些NB-IoT通信技术的相关知识点.也希望你能get到属于自己的知识盲点! 一.前言 NB-IoT(窄带蜂窝物联网 ...
- 教你处理数仓慢SQL常见定位问题
摘要:通常在运维监控出现CPU使用率较高.P80/P95指标较高.慢SQL数量上升等现象,或者业务出现超时报错时,优先应排查是否出现慢SQL. 本文分享自华为云社区<GaussDB慢SQL常见定 ...
- 认识Java的整形数据结构
摘要:java中一切都是对象,为什么int不用创建对象实例化,而可以直接使用? 本文分享自华为云社区<[Java]对基本类型-整型数据结构的认识>,作者: huahua.Dr . 整型数据 ...
- vue2升级vue3: Event Bus 替代方案
在看 https://v3-migration.vuejs.org/breaking-changes/events-api.html 在vue2里面 In 2.x, a Vue instance co ...