hibernate中实体设计时属性类型选择问题

     我们知道,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在你的业务逻辑代表着特定含义,这时候就可能出现一些意想不到的后果。
 
 
总结:在项目中去使用包装类型而不是基本数据类型,这样可以使你编写代码更简单,除非有人给你一个更好的理由去使用基本数据类型或者你的上头要求一定要使用基本数据类型。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值