2017-08-25 108 views
0

说的输出,我有一个表结构如下映射一个表到多个对象使用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 Template将其填充到我的类中?我知道数据库表没有正常化,但由于传统的支持原因,我需要忍受这一点。

+0

和你最好尝试的代码是什么? – StanislavL

+0

使用ResultSetExtractor,遍历City的每一行并检查City是否已经添加到一个国家,并循环遍历每个国家以查看它是否已经添加到Conitnent ...总之,非常丑陋 – cdoe

回答

0

其实你需要添加

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

然后,所有你需要的是在大陆更名为创建一个新的大陆,当国名改为创建国家。

对于每一行城市被创建并添加到当前的国家。

这样一个循环就够了。

0

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

因此,例如,在你的情况下,获取国家的数据,你可以做这样的事情:

public List<Country> getCountries(){ 

    String sql = "SELECT * FROM COUNTRY"; 

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

    return countries; 
} 
相关问题