Mybatis-Plus實現(xiàn)用戶ID自增出現(xiàn)的問題解決
問題描述
項目基于 SpringBoot + MybatisPlus 3.5.2 使用數(shù)據(jù)庫自增ID時, 出現(xiàn)重復(fù)鍵的問題。
自增ID介紹
1) 局部式配置
如下述代碼所示, 通過
@TableId
字段來指定自增字段,Value
為數(shù)據(jù)庫字段名(可以大寫),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
版本時, 會根據(jù)你配置的屬性來靈活的決定是否添加主鍵id
作為插入條件, 執(zhí)行語句如下:
==> 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()
方法調(diào)用 Object.getId()
時報 null
異常, 也即直接使用 save
方法時不可行的。這是可以考慮作以下處理:
- 配置
MybatisPlus
在save
方法也即insert
語句執(zhí)行時忽略id
的獲取 Override .save 方法
- 使用
nanoid + 雪花算法
自動生成id并賦值
Stage2 - 方案二
在我之前的項目使用中, 使用 hidden
類型的 input
框作為id的替代值并save
的方案是可以使用的, 但是在 MybatisPlus 3.5.2
版本中沒法使用, 之前的版本為 MybatisPlus 3.4.2
, 也許是更新修改了底層邏輯, 所以后面我進(jìn)行了回退。
到此這篇關(guān)于Mybatis-Plus實現(xiàn)用戶ID自增出現(xiàn)的問題解決的文章就介紹到這了,更多相關(guān)Mybatis-Plus ID自增內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
spring cloud gateway集成hystrix實戰(zhàn)篇
這篇文章主要介紹了spring cloud gateway集成hystrix實戰(zhàn),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07使用gRPC微服務(wù)的內(nèi)部通信優(yōu)化
這篇文章主要為大家介紹了微服務(wù)優(yōu)化之使用gRPC做微服務(wù)的內(nèi)部通信,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-03-03