Mybatis-Plus实现用户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自增内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Dubbo无法访问远程Zookeeper已注册服务的问题解决方案
今天小编就为大家分享一篇关于Dubbo无法访问远程Zookeeper已注册服务的问题解决方案,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧2019-03-03java算法入门之有效的括号删除有序数组中的重复项实现strStr
大家好,我是哪吒,一个热爱编码的Java工程师,本着"欲速则不达,欲达则欲速"的学习态度,在程序猿这条不归路上不断成长,所谓成长,不过是用时间慢慢擦亮你的眼睛,少时看重的,年长后却视若鸿毛,少时看轻的,年长后却视若泰山,成长之路,亦是渐渐放下执念,内心归于平静的旅程2021-08-08JDK8通过Stream 对List,Map操作和互转的实现
这篇文章主要介绍了JDK8通过Stream 对List,Map操作和互转的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2019-09-09
最新评论