天天看點

随記:判斷是否更新字段

問題背景:

在封裝通用的資料庫操作類時,對于“增、删、查”的編碼沒有太大問題,但是對于“改(更新)”,卻出現了一個問題。

在首次存儲一條記錄時,可以将目标對象的所有字段值原樣存入即可,有值則存值,為null則存null。

但在更新的時候,對于為null的字段,如何區分是“不更新該字段”,還是“将該字段更新為null”?

當然,可以先進行一次讀取操作,然後在修改DTO對象的字段值,最終完全覆寫寫入,但是,這就會多一次讀取操作。

目前的解決方案:

對于DTO對象中的每個字段,設定一個無效預設值,用于标記該字段“未被修改過”,例如:

對于大多數整數類型字段,可以設定-99999為一個無效的預設值;

以“年齡(age)”字段為例,在DTO對象中,将age字段預設值設為-99999;

在執行更新操作的時候,判斷age是否為-99999,如果是,則表示不更新該字段(該字段未被修改過);

否則,則将age字段更新至資料庫,若age為null,則表示将資料庫age字段設為null(清除資料)。

胡思亂想:

對于目前的解決方案,總感覺不是很好,平白無故的出現了一些非通用的自定義數值,假設出現某個字段,-99999是其有效值的話,就需要再尋找另一個無效值來替代。

這時候,我想到JavaScript裡面有 undefined 和 null 兩種表示“空”的值,其中 undefined 正式表示未初始化、未被指派的概念,而 null 則表示空值的概念。

若Java中也存在 undefined 這一概念,那麼,上述問題應該就可以很好的解決了,即出現一種可以差別于null的空值概念,表示未被修改過的概念。

繼續閱讀