簡體   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