考虑这些豆子:
class Country {
String name;
String code;
...
List<City> cities;
}
class City {
String name;
String zip;
...
List<Street> streets;
}
class Street {
String name;
}
我必须从数据库中的3个表中获取嵌套bean。
我可以通过两种方式解决:
查询循环(查询国家/地区,循环查询结果,循环结果查询街道......)
全平面数据源(单个宽选择连接所有3个表,其中所有行的最大详细信息按外部到内部字段排序),然后分割后。
第一个问题:考虑到嵌套水平可能超过3个水平,第二个解决方案是最佳选择吗?
让我们说是,我想使用第二个选项:
select *
from countries c
join cities t ...
join streets s ...
order by c.name, c.code, ..., t.name, t.zip, ...
第二个问题:如何将ResultSet
存储在JdbcTemplate
的bean中?
为此目的是否有将行拆分为嵌套bean的内容?我不能使用自定义RowMapper
因为我没有每行的一个外部bean。
答案 0 :(得分:0)
性能方面,第一个解决方案非常糟糕。这意味着您将对数据库运行大量查询,并且这些查询的数量实际上取决于行数。
我相信数据库最终还是无法解决这个问题。
第二种方法要好得多,你可以在一个查询中处理它,因为你使用jdbc模板,创建相应的对象必须不难。
如果您仍然拥有大量数据,您可能需要考虑使用分页进行检索(带来100条记录,而不是带来另外100条记录)。
大多数数据库驱动程序已经以这种或那种方式执行此操作,您可能希望添加一个&#34;应用程序级别&#34;如果您不想立即将所有数据保存在内存中,请处理此问题,但这实际上取决于用例。
如果这些表虽然很大,但也可以很省,但在这种情况下,第一种方法在任何情况下都会失败(因为数据量很大,所以查询太多)
希望这有帮助