使用Spring JdbcTemplate将一个表的输出映射到多个对象

时间:2017-08-25 12:04:29

标签: java spring jdbctemplate

说,我有一个具有以下结构的表

CONTINENT COUNTRY CAPITAL CITY        POPULATION
--------- ------- ------- ----        ----------
EUROPE    UK      LONDON  LONDON      4234323
EUROPE    UK      LONDON  BIRMINGHAM  432432
EUROPE    GERMANY BERLIN  BERLIN      24342342
EUROPE    GERMANY BERLIN  MUNICH      343433
ASIA      CHINA   BEIJING BEIJING     543345453
ASIA      CHINA   BEIJING SHANGHAI    432434233
ASIA      JAPAN   TOKYO   TOKYO       43232333

我的班级看起来

class Continent {
    String name;
    List<Country> countries;
}

class Country {
    String capitalCityName;
    List<City> cities;
}

class City {
    String name;
    Long population;
}

我可以从上表中选择行并使用JDBC模板将其填充到我的类中的最佳方法是什么?我知道数据库表没有规范化,但由于遗留支持的原因,我需要接受它。

2 个答案:

答案 0 :(得分:0)

实际上你需要添加

select distinct * 
from t 
ORDER BY CONTINENT, COUNTRY, CITY 

然后您只需要在更改大陆名称时创建新的大陆,在国家/地区名称更改时创建国家/地区。

对于每一行,都会创建一个城市并将其添加到当前国家/地区。

这样一个循环就足够了。

答案 1 :(得分:0)

最简单的解决方案是使用 BeanPropertyRowMapper 类。虽然还有其他方法可以做到这一点。

因此,例如,在您的情况下,要获取国家/地区数据,您可以执行以下操作:

public List<Country> getCountries(){

    String sql = "SELECT * FROM COUNTRY";

    List<Country> countries  = getJdbcTemplate().query(sql,
            new BeanPropertyRowMapper(Country.class));

    return countries;
}