繁体   English   中英

如何使用SQL数据库中的列表有效加载对象

[英]How to efficiently load objects with lists from sql-databases

假设我有以下课程:

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

我通常会有这些表:

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

如果我想还原Example -object,我想我有两个选择:

  1. 将每个表连接在一起,产生大量条目并将其组织在哈希图中以重新组装对象
  2. 加载每个Example并为每个示例执行对ObjectAObjectBObjectC列表的单个请求。

如果Example -entries的数量很少,则option2可能是最好的。 但是对于Example每个单个条目,我需要执行x个以上的请求,其中x是类中表的数量。

否则,将所有内容都放在一个联接中就需要我自己重新组织所有数据-创建哈希表,遍历数据和内容,这通常是代码中的大量工作。

我还可以通过选项2进行延迟加载。

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

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

  1. 加载主表和相关表的JOIN
  2. 分别加载主表和相关表的数据,并用Java将它们联接
  3. 还有别的

除非您对带宽有极大的限制,否则我会说选项1很简单,我会同意的。 让数据库进行连接更容易,而在Java中,只需将记录映射到对象即可。

如果节省数据库的带宽很重要,那么选项2会更好,因为每条数据将只获取一次而不会重复,因为选项中的JOIN结果实际上是非规范化数据。

无论如何,我建议您使用Occam的剃刀 :最简单的解决方案通常是最好的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM