Mybatis-Plus實(shí)現(xiàn)用戶ID自增出現(xiàn)的問題解決
問題描述
項(xiàng)目基于 SpringBoot + MybatisPlus 3.5.2 使用數(shù)據(jù)庫自增ID時(shí), 出現(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版本時(shí), 會根據(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)
這是因?yàn)槲以谇岸耸褂昧?nbsp;hidden 類型的 input 框作為id的替代值, 這時(shí)由于主鍵沖突就會報(bào)錯(cuò)。
<input type="hidden" name="id" value="2" class="layui-input">
解決方案
Stage1 - 方案一
這時(shí)我將前端的 hidden 框刪去, 依舊沒有解決問題, 它還是會在 .save() 方法調(diào)用 Object.getId() 時(shí)報(bào) null 異常, 也即直接使用 save 方法時(shí)不可行的。這是可以考慮作以下處理:
- 配置
MybatisPlus在save方法也即insert語句執(zhí)行時(shí)忽略id的獲取 Override .save 方法- 使用
nanoid + 雪花算法自動生成id并賦值
Stage2 - 方案二
在我之前的項(xiàng)目使用中, 使用 hidden 類型的 input 框作為id的替代值并save的方案是可以使用的, 但是在 MybatisPlus 3.5.2 版本中沒法使用, 之前的版本為 MybatisPlus 3.4.2, 也許是更新修改了底層邏輯, 所以后面我進(jìn)行了回退。
到此這篇關(guān)于Mybatis-Plus實(shí)現(xiàn)用戶ID自增出現(xiàn)的問題解決的文章就介紹到這了,更多相關(guān)Mybatis-Plus ID自增內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于Java應(yīng)用日志與Jaeger的trace關(guān)聯(lián)的問題
這篇文章主要介紹了Java應(yīng)用日志如何與Jaeger的trace關(guān)聯(lián),通過jaeger發(fā)現(xiàn)這十次請求中有一次耗時(shí)特別長,想定位一下具體原因,感興趣的朋友跟隨小編一起看看吧2022-01-01
利用Springboot+Caffeine實(shí)現(xiàn)本地緩存實(shí)例代碼
Caffeine是一個(gè)基于Java8開發(fā)的提供了近乎最佳命中率的高性能的緩存庫,下面這篇文章主要給大家介紹了關(guān)于利用Springboot+Caffeine實(shí)現(xiàn)本地緩存的相關(guān)資料,需要的朋友可以參考下2023-01-01
從?PageHelper?到?MyBatis?Plugin執(zhí)行概要及實(shí)現(xiàn)原理
這篇文章主要為大家介紹了從?PageHelper?到?MyBatis?Plugin執(zhí)行概要及實(shí)現(xiàn)原理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
關(guān)于springboot 配置文件中屬性變量引用方式@@解析
這篇文章主要介紹了關(guān)于springboot 配置文件中屬性變量引用方式@@解析,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04
淺談為什么同一個(gè)java文件只能有一個(gè)public類
這篇文章主要介紹了淺談為什么同一個(gè)java文件只能有一個(gè)public類,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
Java中使用Lambda表達(dá)式和函數(shù)編程示例
這篇文章介紹了Java中使用Lambda表達(dá)式和函數(shù)編程示例,該文章會演示多個(gè)示列,分別是變量聲明上下文中的lambda、return語句上下文中的lambda、賦值上下文中的lambda、lambda在數(shù)組初始值設(shè)定項(xiàng)上下文中的用法等等,需要的朋友可以參考一下2021-10-10

