為什麼資料庫表的int型別欄位對映到實體類中要使用Integer型別,而不是int型別?...
如果返回欄位值為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在你的業務邏輯代表著特定含義,這時候就可能出現一些意想不到的後果。
總結:在專案中去使用包裝型別而不是基本資料型別,這樣可以使你編寫程式碼更簡單,除非有人給你一個更好的理由去使用基本資料型別或者你的上頭要求一定要使用基本資料型別。
相關文章
- SqlSugar code first 欄位為列舉型別,預設生成資料庫欄位為bigint如何設定為int型別SqlSugar型別資料庫
- 關於mysql中欄位定義的型別int、tinyint區別MySql型別
- BigDecimal轉為String型別、int型別Decimal型別
- MySQL資料庫int型別的那些事MySql資料庫型別
- andFilterWhere()函式找不出某個int型別欄位為0的資料Filter函式型別
- 自動提升為int型別型別
- 保留兩位小數:資料庫欄位型別NUMBER,Java欄位型別Double型別資料庫型別Java
- INT型別知多少型別
- 強制型別轉換(int)、(int&)和(int*)的區別型別
- Java資料型別與資料庫欄位型別對應關係Java資料型別資料庫
- 主流資料庫欄位型別轉.Net型別的方法資料庫型別
- 判斷a是否是int型別資料型別
- Python基本資料型別之intPython資料型別
- int 和 Integer 有什麼區別
- MySQL中欄位型別與合理的選擇欄位型別;int(11)最大長度是多少?varchar最大長度是多少?MySql型別
- 如何在 Go 中將 int 型別轉為字串Go型別字串
- MySQL int型別長度的意義是什麼MySql型別
- java查詢資料庫,int型欄位為null的情況Java資料庫Null
- Ajax接收int型別亂碼型別
- Mysql資料庫表關於幾個int型別的字元長度MySql資料庫型別字元
- HIBERNATE的對映---資料庫表中欄位和對應持久化類中屬性都是自定義型別的?資料庫持久化型別
- 修改表的欄位型別型別
- 測試Java中的long,int基本型別Java型別
- 資料欄位型別匹配型別
- 將list型別對映到資料欄位 @TableField(typeHandler = StringListTypeHandler.class)型別
- Java中Short型別轉換為Int型別是如何計算的?原碼、反碼、補碼是什麼?Java型別
- C#可空型別,int可以為nullC#型別Null
- int型別和long long型別運算執行時間的差別型別
- 資料庫中欄位資料型別以及約束資料庫資料型別
- 型別轉換(int 和 String)型別
- 誰知道資料庫中的 longbinary型別對應的Java型別是什麼?資料庫型別Java
- MSSQL資料庫的欄位型別總結SQL資料庫型別
- c#System.Int32資料型別官方正寫與簡寫intC#資料型別
- int與Integer的區別
- int和Integer的區別
- EF:oracle的number型別對映為C#的boolean型別Oracle型別C#Boolean
- 【轉】修改表的欄位資料型別的方法資料型別
- 修改欄位資料型別的方法資料型別