Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用SpringJDBC模板面对嵌套bean查询_Java_Spring_Spring Jdbc_Jdbctemplate - Fatal编程技术网

Java 使用SpringJDBC模板面对嵌套bean查询

Java 使用SpringJDBC模板面对嵌套bean查询,java,spring,spring-jdbc,jdbctemplate,Java,Spring,Spring Jdbc,Jdbctemplate,考虑这些bean: class Country { String name; String code; ... List<City> cities; } class City { String name; String zip; ... List<Street> streets; } class Street { String name; } 第二个问题:如何使用JdbcTemplate在bea

考虑这些bean:

class Country {
    String name;
    String code;
    ...
    List<City> cities;
}

class City {
    String name;
    String zip;
    ...
    List<Street> streets;
}

class Street {
    String name;
}
第二个问题:如何使用
JdbcTemplate
在bean中存储
ResultSet


是否有将行拆分为嵌套bean的方法?我不能使用自定义的
行映射器,因为我没有一个用于每一行的外部bean。

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

我相信数据库最终无法处理这个问题

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

如果你还有很多数据,你可能想考虑用分页来检索(带来100条记录,而不是带来另外100条记录)。 大多数DB驱动程序已经以这样或那样的方式实现了这一点,如果您不想同时在内存中保存所有数据,那么您可能需要为此添加“应用程序级”处理,但这实际上取决于用例


如果表a非常大,尽管联接也可能代价高昂,但在这种情况下,第一种方法无论如何都会失败(因为数据量很大,所以查询太多)。

从性能角度看,第一种解决方案非常糟糕。这意味着您将对数据库运行大量查询,而这些查询的数量实际上取决于行数

我相信数据库最终无法处理这个问题

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

如果你还有很多数据,你可能想考虑用分页来检索(带来100条记录,而不是带来另外100条记录)。 大多数DB驱动程序已经以这样或那样的方式实现了这一点,如果您不想同时在内存中保存所有数据,那么您可能需要为此添加“应用程序级”处理,但这实际上取决于用例


如果表真的很大,尽管连接也会很昂贵,但在这种情况下,第一种方法无论如何都会失败(因为数据量很大,所以查询太多)。

谢谢标记,但是如何将平面结果集“拆分”到嵌套bean?SpringJDBCTemplate实现了这种模式吗?我刚才提到了执行查询的不同方法。给你的问题:请阅读这里的答案(被接受的答案):非常有趣的“自动增长”设置,但在我的情况下,我无法理解如何使用rowmapper,因为如果我有100行,我不希望有100个外部bean…我试图用该解决方案更好地解释我的问题。如果我有3行的意大利国家和3个不同的城市,我只想要一个“意大利”豆,里面有3个城市,而不是3个不同的“意大利”豆。据我所知,rowmapper每行映射一个对象。谢谢你,Mark,但是如何将平面结果集“拆分”到嵌套bean?SpringJDBCTemplate实现了这种模式吗?我刚才提到了执行查询的不同方法。给你的问题:请阅读这里的答案(被接受的答案):非常有趣的“自动增长”设置,但在我的情况下,我无法理解如何使用rowmapper,因为如果我有100行,我不希望有100个外部bean…我试图用该解决方案更好地解释我的问题。如果我有3行的意大利国家和3个不同的城市,我只想要一个“意大利”豆,里面有3个城市,而不是3个不同的“意大利”豆。据我所知,rowmapper每行映射一个对象。
select * 
from countries c 
join cities t ... 
join streets s ... 
order by c.name, c.code, ..., t.name, t.zip, ...