如何使用sql-databases中的列表有效加载对象

时间:2015-10-11 06:41:11

标签: java mysql sql relational-database

假设我有以下课程:

class Example {
  List<ObjectA> objectsOfA;
  List<ObjectB> objectsOfB;
  List<ObjectC> objectsOfC;    
  ....
}

我通常会有这些表格:

  • Example(Id,其他属性)
  • ObjectA(某些属性,ExampleId)
  • ObjectB(某些属性,ExampleId)
  • ObjectC(某些属性,ExampleId)

如果我想恢复Example - 对象,我想我有两个选择:

  1. 将每个表连接在一起,产生大量条目并用哈希映射组织它以重新组合对象
  2. 加载每个Example以及针对ObjectAObjectBObjectC列表的单个请求的每个示例。
  3. 如果Example - 条目的数量很少,则option2可能是最佳的。但是对于Example中的每个条目,我需要做x个更多的请求,其中x是我班级中的表数。

    否则,在单个连接中包含所有内容需要我自己重新组织所有数据 - 创建散列图,迭代数据和内容,这通常是代码中的大量工作。

    我也可以使用选项2来延迟加载。

    我还有其他选择吗?我错过了什么? (当然我知道ORM,但我决定不在Android上使用它们)

1 个答案:

答案 0 :(得分:1)

如果我理解正确,那么问题是,从主表和相关表中加载数据有哪些方法更好:

  1. 加载主表和相关表的JOIN
  2. 分别加载主表和相关表的数据,并以Java
  3. 加入它们
  4. 其他东西
  5. 除非你的带宽非常受限制, 我说选项1很简单,我会选择。 让数据库进行连接变得更容易,而在Java中只是将记录映射到对象。

    如果使用数据库保存带宽很重要, 然后选项2更好, 因为每一条数据只会被提取一次而不会重复, 因为选项中的JOIN结果本质上是非规范化数据。

    无论如何,我建议遵循Occam's razor:最简单的解决方案往往是最好的。