在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