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

Java DAO: null and Integer object or negative number and int in mapped object for optional number column?

我目前在一个项目中工作,我们最近讨论了这个问题。因此,让任何数据库 table 具有允许在源代码中具有 "no value" 的数字列。

我的一些同事更喜欢在他们的映射对象中使用原始类型 int 并将这种情况下的值设置为 -1;我更喜欢使此列可为空,使用源中的 Integer 对象而不是原始类型并将此值设置为空。

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

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

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

...

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

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

好得多

请考虑一下,您的数字列正在计算中使用,添加 -1(而不是 null)可能会更改计算。但是,如果您有 Null,您的计算将是正确的

使用空整数的优点:

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

那些人仍然使用 int - primitive 的原因可能是他们还没有意识到使用 Objects 而不是 primitives 的好处,或者仍然习惯于 JDK 1.4 风格编码

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