mybatis-plus id主鍵生成的坑
簡要說明
由於mybatis-plus
會自動插入一個id
到實體對象, 不管你封裝與否, 所以有時候導致一些意外的情況發生
默認是生成一個長數字字符串(編碼不同可能結尾帶有字母)
錯誤
ested exception is org.apache.ibatis.reflection.ReflectionException: Could not set property 'id' of 'class com.xxx' with value '1110423703487479810' Cause: java.lang.IllegalArgumentException: java.lang.ClassCastException@14041406
大致就是由於自動生成了一個id1110423703487479810
, 但是無法放入到integer
中
解決方案一
1. 修改id字段類型
將id字段類型改爲long
, 這樣就能保證有足夠位數放入生成的id
2. 調整數據庫id字段類型
將數據庫的id
字段的長度(改爲20位)
解決方案二
如果想要使用id
自增的, 就需要把mybatis-plus
這個id
生成的功能給關掉
添加註解
在id
字段上加上如下註解即可
@TableId(value = "id",type = IdType.AUTO)
其他type
類型介紹
AUTO
: AUTO(0, “數據庫ID自增”),INPUT
: INPUT(1, “用戶輸入ID”),ID_WORKER
: ID_WORKER(2, “全局唯一ID”),UUID
: UUID(3, “全局唯一ID”),NONE
: NONE(4, “該類型爲未設置主鍵類型”),ID_WORKER_STR
: ID_WORKER_STR(5, “字符串全局唯一ID”);