Java DAO:可选数字列的映射对象中的 null 和 Integer 对象或负数和 int?

Ste*_*anM 1 java persistence jdbc

目前我正在从事一个项目,我们最近对此进行了讨论。因此,让任何带有数字列的数据库表都允许在源代码中“无值”。

我的一些同事更喜欢在其映射对象中使用基本类型 int 并将本例中的值设置为 -1;我更喜欢使该列可为空,使用源中的 Integer 对象而不是原始类型,并将该值设置为 null。

现在我正在寻找两种变体的优点和缺点,但到目前为止找不到任何东西。

到目前为止我找到的唯一一篇文章是这篇: http://www.javapractices.com/topic/TopicAction.do?Id=134 ...

这条规则有一个非常常见的例外。对于粗略映射到数据库记录的模型对象,通常适合使用 null 来表示在数据库中存储为 NULL 的可选字段

...

@编辑我需要补充一点,这种列在这个项目中用作一种假外键。它们不是真正的数据库约束,但用作数据库约束。不要问我为什么...我知道我知道:-) -1 在这种情况下意味着它与另一个表的主键/id 没有关系。所以它不需要任何计算或类似的东西......

Sat*_*oup 5

对于可空列,当您不想存储值时,最好具有空值。您使用 Null Integer 对象的方法远远好于 -1

考虑到这一点,您的数字列正在用于计算,并且添加 -1 (而不是 null)可能会更改计算。但是,如果你有Null你的计算就会是正确的

使用空整数的优点:

  1. 如果计算中使用数字列,则不会影响您的输出。
  2. 使用 ORM 时,如果是插入查询,底层框架不必在该列中插入值
  3. 另一个好处是,您的数据库将减少可空列中值为 -1 的行数。(想象一下 100 亿行,其中 -1 是您想要在其中放置 null 的可空列的值)
  4. 由于 Integer 和 Null 都需要 4 个字节的内存空间,因此可以通过使用 static null Integer 对象来获得内存优势。
  5. 你不必到处检查-1

这些人仍然使用 int - 原语的原因可能是他们还没有意识到使用对象相对于原语的好处,或者仍然习惯 JDK 1.4 风格的编码

我希望我能够回答你的问题......