Mybatis-plus插入數(shù)據(jù)遇到主鍵沒有默認值的情況
Mybatis-plus插入數(shù)據(jù)遇到主鍵沒默認值
新增數(shù)據(jù)時報
java.sql.SQLException: Field 'id' doesn't have a default value

mybatis-plus的insert方法,在底層會默認生成一個Long類型的UUID,這就導致跟數(shù)據(jù)庫里面類型不一致,把數(shù)據(jù)庫默認自增的主鍵給禁了
主鍵生成方式類型如下(IdType):
AUTO(0, "數(shù)據(jù)庫ID自增"), INPUT(1, "用戶輸入ID"), ID_WORKER(2, "全局唯一ID"), UUID(3, "全局唯一ID"), NONE(4, "該類型為未設置主鍵類型"), ID_WORKER_STR(5, "字符串全局唯一ID");
設置主鍵的生成方式
@TableId(value = "id",type = IdType.INPUT) // 主鍵手動輸入
mybatis-plus插入數(shù)據(jù)時,關(guān)于id沒有賦值,系統(tǒng)自動賦值,并報錯Could not set property ‘id‘ of ‘***‘ with value
趕時間的同學可以直接看文章最后的結(jié)果
創(chuàng)建了一張表,表里面有id字段,但是并沒有聲明它為主鍵

對應java實體類為

然后開始inset,隨便寫個偽代碼
User user = new User();
user.setId("");
user.setName("測試");
this.insert(user);
然后就報錯了,一看報錯信息是
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException:
Could not set property ‘id’ of 'class User ’ with value ‘1278867511785242626’
Cause: java.lang.IllegalArgumentException: argument type mismatch
what??
我并沒有設置id啊,看著這有規(guī)則數(shù)字,很像是mybatis-plus自動生成的主鍵值
然后就翻了翻mybatis-plus的大致源碼,找到idType類
看到mybatis-plus有這5中主鍵生成類型,一般對應我們數(shù)據(jù)庫表中id的生成類型

比如我設置我得實體類id的生成類型為uuid

以上一般是我們的正常操作
現(xiàn)在的我不想在這個表中建立主鍵,我想插入數(shù)據(jù)的時候,先不塞id的值,我就是想寫bug(??開玩笑啊),這樣怎么弄呢
我不添加@TableId注解,不設置id的類型不行了嗎,答案是不行的

如果你的實體類中有字段名定義為了“id”,mybatis-plus就默認你這個字段是主鍵,就算你不定義它的生成類型,mybatis-plus在自動裝載的時候會幫你把id設置為默認類型,而默認的idType就是ID_WORKER,全局唯一


那好,我加上主鍵@TableId
既然我這個表沒有主鍵,我也不想塞值進去,那我把實體里面的id類型設置為
@TableId(type = IdType.NONE) private String id;
這個行不行呢,答案還是是不行的,如下
找到TableInfoHelper 這個類,里面有初始化table的方法 initTableId

里面進行了判斷,如果idType為NONE,還是會把id的類型設置成全局默認類型ID-WORKER
哈哈,由此可以看出mybatis-plus怕我們忘記設置主鍵id真是操碎了心啊
好了,上面5中id生成的類型只有input看著可以滿足我們的需求了
這個顧名思義就是用戶塞什么值就是什么值
我們把idType設置為
@TableId(type = IdType.INPUT) private String id;
這樣我們就可以隨意的寫入id任何值了,。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
MyBatis將查詢出的兩列數(shù)據(jù)裝配成鍵值對的操作方法
這篇文章主要介紹了MyBatis將查詢出的兩列數(shù)據(jù)裝配成鍵值對的操作代碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-08-08
詳解Java的Hibernate框架中的List映射表與Bag映射
這篇文章主要介紹了Java的Hibernate框架中的List映射表與Bag映射,Hibernate是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下2015-12-12
springboot內(nèi)置的tomcat支持最大的并發(fā)量問題
這篇文章主要介紹了springboot內(nèi)置的tomcat支持最大的并發(fā)量問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03
SpringBoot?集成?Hera的過程(讓日志查看從?"找罪證”"變?"查答案
本文詳細介紹了SpringBoot集成Hera日志平臺的完整流程,主要包括Hera的核心價值、架構(gòu)設計、實戰(zhàn)落地、架構(gòu)師進階、避坑指南和總結(jié),感興趣的朋友跟隨小編一起看看吧2026-01-01

