咱們知道,hibernate並無強制要求pojo(實體類 )屬性必須是基本數據類型或者是包裝類,可是咱們把屬性聲明爲基本數據類型( 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)
3,hibernate官方推薦的作法
下面引用自hibernate官方文檔
Cat has a property called id. This property maps to the primary key column(s) of a database table. The property might have been called anything, and its type might have been any primitive type, any primitive "wrapper" type, java.lang.String or java.util.Date.
...
We recommend that you declare consistently-named identifier properties on persistent classes and that you use a nullable (i.e., non-primitive) type.
能夠看出,hibernate是建議開發者使用包裝類的。
4,二者在實際開發中的比較
a),若是你的數據庫字段是容許爲空的,使用包裝類。若是不容許爲空,使用包裝的時候,若是你往數據庫插入null值,此時就會拋出異常。而後你就能夠對異常進行捕獲並處理。
b),使用基本數據類型的時候,若是字段是NULL,那麼JDBC會返回0,可是這裏會有一個問題。有可能0在你的業務邏輯表明着特定含義,這時候就可能出現一些意想不到的後果。
總結:在項目中去使用包裝類型而不是基本數據類型,這樣能夠使你編寫代碼更簡單,除非有人給你一個更好的理由去使用基本數據類型或者你的上頭要求必定要使用基本數據類型。