我有一个结构为
的对象模型
仪表板
面板清单
集装箱清单
小部件列表
如果我从数据库获得整个仪表板,面板+容器+小部件,则需要多个I / O.
我希望在一个I / O中得到它。为此我准备了一个查询,它给了我这个结果集。
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
使用列表数据结构可以填充此模型,但是我需要时间来在上面的对象模型中有效地填充此结果集。有没有办法?
答案 0 :(得分:0)
如果您不严格限制使用JDBC,ORM解决方案可以解决您的问题。例如。在Hibernate中,您可以轻松配置实体映射以使用延迟或预先加载。在后一种情况下,当您加载Dashboard
对象时,持久性框架将获取所有包含的面板,容器和小部件,总共1到4个查询(取决于配置 - 请注意,4个表的单个连接查询可能不会如果行数很多,则为最佳),并自动为您初始化整个对象图。
答案 1 :(得分:0)
数据中的严格排序和嵌套使得这相当简单。解决方案是一个查找ID更改的循环 - 当ID更改时,将创建一个新实例。循环的迭代维护当前仪表板,面板,组件,小部件。例如
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