在Java中 – 如何将resultSet映射到复杂对象?

如何将结果集从几个表映射到复杂对象? 让我详细说明:

可以说我有这两个类:

public class User { private int user_id; private String fname; private String lname; //getters setters... } public class Country{ private String country; private ArrayList users; } 

sql查询:

SELECT * FROM users U,Country C WHERE c.user_id = U.id.

给我以下输出 –

 id | fname | lname| country 1 | Jack | Levi | USA 1 | Jack | Levi | UK 2 | Mike | Brown| Germany 

如何将这些结果映射到Country类? 我需要从它创建一个Json字符串来得到这样的东西:

 { id : 1, fname: "jack", lname" "levi", countries : {"USA", "UK"} } 

非常感谢你!!

创建一个HashMap,其中user id是键,user是值。 然后,当您处理结果集时,执行map.get(resultset.get(userid)),如果它为null,则创建一个新用户,但如果不是,则执行逻辑以将用户附加到该国家/地区。

 HashMap users; HashMap countries; //inside the result set processing User u = users.get(resultSet.get("id")); if(null != u) { //populate user here } else { Country c = countries.get(resultSet.get(country); c.users.add(u); } 

当使用springframework的jdbcTemplate时,实现RowMapper接口是一个好方法。

也许尝试这样的事情:

 ArrayList users = new ArrayList(); while(resultSet.next) { users.add(new User(resultSet.getString("id"), resultSet.getString("fname"), resultSet.getString("lname")); //you can also add your countries to an array list } 

ORM库确实需要你描述。 虽然大多数人可能会执行2次查询而不是连接。 通常,您需要在列表字段上提供某种注释,以便它知道如何执行查询:

 public class Country{ private String country; @OneToMany(...) private ArrayList users; } 

当您选择Country对象时,ORM会选择所有相关的User对象并将它们添加到用户ArrayList中。

我使用的图书馆是sormula (我是作者)。 请参阅一对多示例 。 如果User类中的外键与Country类中的主键同名,则不需要注释。

此页面包含有关JPA OneToMany注释的详细信息: en.wikibooks.org/wiki/Java_Persistence/OneToMany