解決mybatis-plus新增數(shù)據(jù)自增ID變無序問題
mybatis-plus新增數(shù)據(jù)自增ID變無序
問題描述
在測試mybatis-plus時, 發(fā)現(xiàn)新增接口,新增出來的數(shù)據(jù)id變的巨長且無序, 經過查詢,原來是實體類少了注解, 下面是未添加之前的
@Data public class User { ? ? private Integer id; ? ? private String username; ? ? // 忽略,不傳到前端 ? ? @JsonIgnore ? ? private String password; ? ? private String nickname; ? ? private String email; ? ? private String phone; ? ? private String address; }
解決
這里需要在id上指定, 自增的設定: @TableId(value = "id", type = IdType.AUTO), 如下
@Data public class User { ? ? @TableId(value = "id", type = IdType.AUTO) ? ? private Integer id; ? ? private String username; ? ? // 忽略,不傳到前端 ? ? @JsonIgnore ? ? private String password; ? ? private String nickname; ? ? private String email; ? ? private String phone; ? ? private String address; }
但下次新增的時候, id會從你最后一次新增的那個id開始自增, 所以我們的將mysql的id進行重置, 重置方法, 這里就采用比較簡單的
1. 刪除錯誤id數(shù)據(jù)
首先將之前新增的無序的id數(shù)據(jù)刪除
2. alter table重置自增ID
例如:
DELETE FROM USER WHERE ID = 4;
使用 ALTER TABLE 重置自增 ID:
ALTER TABLE table_name AUTO_INCREMENT = value;
table_name
為當前要重置自增 ID 的表名。value
必須是大于當前表中最大 ID 數(shù),本示例中當前表最大數(shù)為 2,我們可以設置成 3。
至此, 后面就可以愉快的寫代碼了
mybaits-plus新增數(shù)據(jù)明明沒有輸入id的值(id自增)卻報錯
mybaits-plus新增數(shù)據(jù)明明沒有輸入id的值(id自增)卻報錯???
新增數(shù)據(jù)
{ "name": "第二fff會議室", "isApprove": 1, "remarks": "第1會議室" }
報錯信息
Data truncation: Out of range value for column 'id' at row 1
明明沒有輸入id的值
并且數(shù)據(jù)庫表中已經設置了id為自增
百度資料,終于找到了原因
這里貼圖展示原因:
mybatis-plus開啟主鍵雪花策略,生成19位隨機字符串,數(shù)據(jù)庫中的主鍵字段為int類型,長度小于19位。解決:將數(shù)據(jù)庫中表的主鍵字段設置為bigint類型
結果成功
{ "code": 201, "data": true, "message": "請求成功" }
MyBatisPlus自增id怎么設置成int自增呢?
使用 mybatis-plus的insert方法,在底層會默認生成一個Long類型的UUID,這就導致跟數(shù)據(jù)庫里面類型不一致導致錯誤,我們首先要做的是要把這個默認自增的主鍵給禁了
1.在實體類 id上面加一個注解,并且實體類繼承Model
@TableId(value = “id”,type = IdType.INPUT) private Integer id;
2.然后在重寫這個方法
@Override protected Serializable pkVal() { return this.id; }
3.不要忘記了在數(shù)據(jù)庫設計表中勾選自動增長,不然會報錯:
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
System.getProperty(“l(fā)ine.separator“)含義及意義詳解
這篇文章主要介紹了System.getProperty(“l(fā)ine.separator“)含義,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-05-05Jmeter基于JDBC請求實現(xiàn)MySQL數(shù)據(jù)庫測試
這篇文章主要介紹了Jmeter基于JDBC請求實現(xiàn)MySQL數(shù)據(jù)庫測試,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-10-10