背景:
由于項目某個功能用到優先級字段來判斷,需要在mysql表中定義一個字段XX,類型為int,默認為0,具體值由后臺配置,正常入庫即可
問題:
由于后臺配置存量其他類型的數據無需該字段,也不想動存量,所以該字段傳給后臺為null,insert操作后,mysql表中該字段為null,但是期望為0
所以代碼中對該字段進行處理,判斷XX字段為null,則手動賦值0,否則取后臺配置的值。
//特殊處理代碼
InfoDO.setXx(request.getXX() == null ? 0 : request.getXX());
正常情況下是可以解決問題,但發現還是解決不了問題,雖然手動賦值0,但落DB還是null
解決:
起初以為是Mybatis的一個坑,Integer類型,如果值為0,落DB都是為null的(以為0都會被mybatis框架轉換為null),那這樣就莫名其妙了。各種百度,依舊沒有找到解決辦法
嘗試著從后臺給該字段傳一個0,發現能夠正常入庫,DB顯示的是0,所以還是可以傳0的
覺得挺奇怪的,手動賦值0 和 后臺傳的0有什么區別?后來想著后臺傳過來的0,經過反序列化后是一個Integer對象,而手動賦值的是一個基本數據類型,那手動賦值就給它new一個對象Integer,試試看,如下
//特殊處理代碼
InfoDO.setXx(request.getXX() == null ? new Integer(0) : request.getXX());
這樣處理后,發現如果后臺XX字段傳null,特殊處理賦值0,能夠正常入庫了