使用Spring Jdbc Template面对嵌套bean查询

时间:2016-02-18 07:39:08

标签: java spring spring-jdbc jdbctemplate

考虑这些豆子:

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。

1 个答案:

答案 0 :(得分:0)

性能方面,第一个解决方案非常糟糕。这意味着您将对数据库运行大量查询,并且这些查询的数量实际上取决于行数。

我相信数据库最终还是无法解决这个问题。

第二种方法要好得多,你可以在一个查询中处理它,因为你使用jdbc模板,创建相应的对象必须不难。

如果您仍然拥有大量数据,您可能需要考虑使用分页进行检索(带来100条记录,而不是带来另外100条记录)。

大多数数据库驱动程序已经以这种或那种方式执行此操作,您可能希望添加一个&#34;应用程序级别&#34;如果您不想立即将所有数据保存在内存中,请处理此问题,但这实际上取决于用例。

如果这些表虽然很大,但也可以很省,但在这种情况下,第一种方法在任何情况下都会失败(因为数据量很大,所以查询太多)

希望这有帮助