映射一个表到多个对象使用Spring的JdbcTemplate
问题描述:
说的输出,我有一个表结构如下映射一个表到多个对象使用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将其填充到我的类中?我知道数据库表没有正常化,但由于传统的支持原因,我需要忍受这一点。
答
其实你需要添加
select distinct *
from t
ORDER BY CONTINENT, COUNTRY, CITY
然后,所有你需要的是在大陆更名为创建一个新的大陆,当国名改为创建国家。
对于每一行城市被创建并添加到当前的国家。
这样一个循环就够了。
答
最简单的解决方案是使用类别BeanPropertyRowMapper。虽然还有其他方法可以做到这一点。
因此,例如,在你的情况下,获取国家的数据,你可以做这样的事情:
public List<Country> getCountries(){
String sql = "SELECT * FROM COUNTRY";
List<Country> countries = getJdbcTemplate().query(sql,
new BeanPropertyRowMapper(Country.class));
return countries;
}
和你最好尝试的代码是什么? – StanislavL
使用ResultSetExtractor,遍历City的每一行并检查City是否已经添加到一个国家,并循环遍历每个国家以查看它是否已经添加到Conitnent ...总之,非常丑陋 – cdoe