2017-08-25 91 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; 
} 
相關問題