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框架维护,另一种是由数据库维护. 自己维护就是在插入数据的时候,一定要指定主键的值,否则会出错,如果由框架维护和由数据库维护 ...
随机推荐
- Docker 部署工具
Docker 容器的创建比较简单,容器解决了应用程序对于运行环境的依赖问题,但是在当前所处的微服务盛行的情况下,手动管理容器是一件比较重复其及其枯燥的工作,这项工作理论上可以通过计算机来完成,因此涌现 ...
- Spring表达式语言(SPEL)学习(03)
rootObject 在表达式中直接写name和getName(),这时候Expression是无法解析的,因为其不知道name和getName()对应什么意思 @Test public void t ...
- 为什么maven配置完Tomcat且运行之后页面内容没有显示出来?
1.如何在maven项目中配置一个webapp项目? 首先新建一个maven项目 项目目录 <?xml version="1.0" encoding="UTF-8& ...
- cookie的一些知识点总结
一.cookie的种类 sessionID 这个ID是会话性的,只要关闭了当前浏览器,这个ID会消失,需要调用getSessoin重新获取一个新的session 会话性cookie 这个cookie也 ...
- LayoutBuilder(获取父类的宽高)
LayoutBuilder 是 Flutter 中的一个构建组件,用于根据父容器的约束对其子组件进行布局. import 'package:flutter/material.dart'; void m ...
- 华为云MVP付健权:从机械工程师到AI开发者的华丽转身
摘要:谁说AI开发难,看一个机械工程师是如何转型成为AI工程师的. 付健权,华为云MVP,企业上云导师.软通动力,售前解决方案经理,为制造业讲解华为云产品,为客户提供上云和云上解决方案.为企业提供大数 ...
- Serverless冷启动:如何让函数计算更快更强?
摘要:借助Serverless计算,开发者仅需上传业务代码并进行简单的资源配置便可实现服务的快速构建部署,云服务商则按照函数服务调用量和实际资源使用收费,从而帮助用户实现业务的快速交付和低成本运行. ...
- GaussDB(DWS)发生数据倾斜不要慌,一文教你轻松获取表倾斜率
摘要:GaussDB(DWS)是MPP并行架构,若表的数据存在倾斜情况,会引起一系列性能问题,影响用户体验,严重时可能会引起系统故障.因此能快速获取倾斜的表并整改是GaussDB(DWS)运维管理人员 ...
- 解析WeNet云端推理部署代码
摘要:WeNet是一款开源端到端ASR工具包,它与ESPnet等开源语音项目相比,最大的优势在于提供了从训练到部署的一整套工具链,使ASR服务的工业落地更加简单. 本文分享自华为云社区<WeNe ...
- async await 异步下载 异步代码加锁 lock 异步缓存
async await 异步下载 异步代码加锁 lock 异步缓存 FTP异步下载代码: /// <summary> /// 异步下载文件 /// </summary> /// ...