為什麼資料庫表的int型別欄位對映到實體類中要使用Integer型別,而不是int型別?...

weixin_34365417發表於2018-04-17

如果返回欄位值為null,int型別會報錯,Integer不會報錯。因為int型別宣告的是變數,而null是物件所以會報錯。Integer是包裝類,包裝類符合物件的特徵並提供了一些必要的屬性和方法。

int型別的預設值為0,Integer型別的預設值為null。


  我們知道,一些框架並沒有要求(實體類 )屬性必須是基本資料型別或者是包裝類,但是我們把屬性宣告為基本資料型別( primitive types directly)或者包裝類 ( wrapping classes for primitives)對我們程式碼的編寫有著深遠的影響。


1,使用基本資料型別的好處

a),使用基本資料型別意味著你所定義的屬性不允許為空,這樣你在獲取該屬性的時候就不可能會得到一個null值。

b),int在java中佔32/64 bits,而Integer佔了16個位元組,所以使用Integer在效能方面要比int差一些。


2,使用包裝類的好處

a),當我們不想給這個屬性設定任何值的時候,我們可以給它一個null值(前提是資料庫的欄位允許插入NULL)。

b),我們可以在pojo類中使用驗證註解對屬性的值做校驗(例如: javax.validation.constraints.NotNull)


4,兩者在實際開發中的比較

a),如果你的資料庫欄位是允許為空的,使用包裝類。如果不允許為空,使用包裝的時候,如果你往資料庫插入null值,此時就會丟擲異常。然後你就可以對異常進行捕獲並處理。

b),使用基本資料型別的時候,如果欄位是NULL,那麼JDBC會返回0,但是這裡會有一個問題。有可能0在你的業務邏輯代表著特定含義,這時候就可能出現一些意想不到的後果。



總結:在專案中去使用包裝型別而不是基本資料型別,這樣可以使你編寫程式碼更簡單,除非有人給你一個更好的理由去使用基本資料型別或者你的上頭要求一定要使用基本資料型別。

相關文章