Mybatis-Plus实现用户ID自增出现的问题解决
作者:一条菜鸟鱼
项目基于 SpringBoot + MybatisPlus 3.5.2 使用数据库自增ID时, 出现重复键的问题,本文就来介绍一下解决方法,感兴趣的可以了解一下
问题描述
项目基于 SpringBoot + MybatisPlus 3.5.2 使用数据库自增ID时, 出现重复键的问题。
自增ID介绍
1) 局部式配置
如下述代码所示, 通过
@TableId字段来指定自增字段,Value为数据库字段名(可以大写),IdType为自增类型。
public class User {
@TableId(type = IdType.AUTO)
//@TableId(value = "id", type = IdType.AUTO)
private Integer id;
private String name;
private Integer age;
}2) 全局式配置
在
application.yaml配置中配置id-type: auto| 如果使用 SpringMVC 管理则在XML中配置即可, 会对所有 POJO 类配置自增。
mybatis-plus:
configuration:
map-underscore-to-camel-case: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
global-config:
db-config:
id-type: auto问题
在使用
MybatisPlus 3.5.2版本时, 会根据你配置的属性来灵活的决定是否添加主键id作为插入条件, 执行语句如下:
==> Preparing: INSERT INTO news (id, title, content, time ) VALUES ( ?, ?, ? ) ==> Parameters: 2(int), 3(String), 333(String), 2023-07-20 18:38:53.0(Timestamp)
这是因为我在前端使用了 hidden 类型的 input 框作为id的替代值, 这时由于主键冲突就会报错。
<input type="hidden" name="id" value="2" class="layui-input">
解决方案
Stage1 - 方案一
这时我将前端的 hidden 框删去, 依旧没有解决问题, 它还是会在 .save() 方法调用 Object.getId() 时报 null 异常, 也即直接使用 save 方法时不可行的。这是可以考虑作以下处理:
- 配置
MybatisPlus在save方法也即insert语句执行时忽略id的获取 Override .save 方法- 使用
nanoid + 雪花算法自动生成id并赋值
Stage2 - 方案二
在我之前的项目使用中, 使用 hidden 类型的 input 框作为id的替代值并save的方案是可以使用的, 但是在 MybatisPlus 3.5.2 版本中没法使用, 之前的版本为 MybatisPlus 3.4.2, 也许是更新修改了底层逻辑, 所以后面我进行了回退。
到此这篇关于Mybatis-Plus实现用户ID自增出现的问题解决的文章就介绍到这了,更多相关Mybatis-Plus ID自增内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
