Эффективно заполнить набор результатов в объектной модели - PullRequest
0 голосов
/ 20 мая 2010

У меня есть объектная модель, структура которой
Панель приборов
Список панелей
Список контейнеров
Список виджетов
Если я получу всю панель инструментов с панелями + контейнерами + виджетами из базы данных, то потребуется несколько операций ввода-вывода Я хочу получить его за один ввод / вывод. Для этого я подготовил запрос, который дает мне этот набор результатов.

DASHBOARDID PANELID CONTAINERID WIDGETID
13 11 5 2
13 11 5 3
13 11 6 4
13 11 6 5
13 12 7 6
13 12 7 7
13 12 8 8
13 12 8 9

Используя структуру списка данных, эту модель можно заполнить, но требуется время, чтобы эффективно заполнить этот набор результатов в приведенной выше объектной модели. есть ли способ?

Ответы [ 2 ]

0 голосов
/ 24 мая 2010

Строгий порядок и вложение в данные делают это довольно простым. Решение представляет собой цикл, который ищет изменения в идентификаторе - при изменении идентификатора создается новый экземпляр. Это итерация цикла поддерживает текущую панель, панель, компонент, виджет. Например

Dashboard dashboard,
Panel panel;
Container container;
Widget widget;
List<Dashboard> dashboards; 
ResultSet rs = ...;
while (rs.next())
{
   int dashboardID = rs.getInt(1);
   int panelID = rs.getInt(2);
   int dashboardID = rs.getInt(3);
   int dashboardID = rs.getInt(4);

   if (dashboard==null || dashboardID!=dashboard.id()) {
      dashboard = new Dashboard(dashboardID);
      dashboards.add(dashboard);
   }
   if (panel==null || panelID!=panel.id()) {
      panel = new Panel(panelID);
      dashboard.add(panel);
   }
   if (container!=null || containerID!=container.id()) {
      container = new Container(containerID);
      panel.add(container);
   }
   // wimilarly for widget

}
// all dashboards in "dashboards" initialized with hierarchy
0 голосов
/ 20 мая 2010

Если вы не строго ограничены использованием JDBC, решение ORM решит вашу проблему. Например. в Hibernate вы можете легко настроить отображение сущностей для использования отложенной или активной загрузки. В последнем случае, когда вы загружаете объект Dashboard, каркас постоянства выбирает все содержащиеся в нем панели, контейнеры и виджеты с общим количеством запросов от 1 до 4 (в зависимости от конфигурации - обратите внимание, что один запрос на соединение для 4 таблиц может быть неоптимальным если есть много строк), и автоматически инициализировать весь граф объектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...