我們知道,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在你的業務邏輯代表著特定含義,這時候就可能出現一些意想不到的後果。
總結:在項目中去使用包裝類型而不是基本數據類型,這樣可以使你編寫代碼更簡單,除非有人給你一個更好的理由去使用基本數據類型或者你的上頭要求一定要使用基本數據類型。
Hibernate3.1.2_中文文檔PDF http://www.linuxidc.com/Linux/2016-02/128462.htm
Hibernate學習入門教程 http://www.linuxidc.com/Linux/2015-08/121498.htm
在Hibernate中開啟日志 http://www.linuxidc.com/Linux/2015-07/120499.htm
Hibernate+JUnit測試實體類生成數據庫表 http://www.linuxidc.com/Linux/2015-07/120161.htm
Hibernate整體理解 http://www.linuxidc.com/Linux/2014-07/104405.htm
Hibernate的映射機制 http://www.linuxidc.com/Linux/2014-12/110265.htm
Hibernate 的詳細介紹:請點這裡
Hibernate 的下載地址:請點這裡