在做SSM項目時發現一個有趣的bug,在這裡記錄一下。 資料庫表如下: 實體類:grade欄位初始設定為int類型 在用mybatis對第三條數據進行修改時,希望賦值的更改,未賦值的不更改,測試運行 修改後發現資料庫中的grade欄位變成了0,這不是我想要的,(按照正常需求應該是原來的數字5) 查看 ...
在做SSM項目時發現一個有趣的bug,在這裡記錄一下。
資料庫表如下:
實體類:grade欄位初始設定為int類型
在用mybatis對第三條數據進行修改時,希望賦值的更改,未賦值的不更改,測試運行
修改後發現資料庫中的grade欄位變成了0,這不是我想要的,(按照正常需求應該是原來的數字5)
查看了一下日誌,發現了貓膩:
int 類型,在預設情況下不賦值為0,執行到mybatis的更新語句時,被當做數字0,而非null,
仔細想想Integer和int 的區別,integer的預設值為null,即Integer可以區分出未賦值和值為0的區別,int則無法表達出未賦值的情況,
我又把之前實體類中的grade 類型改為了Integer成功實現了自己想要的。
總結:在實體類中儘量使用Integer修飾,Integer可以區分出未賦值和值為0的區別,我們大部分做判斷都是以“”null“”去判斷的,特在此做個筆記。