我有两个表,其中一个包含人名(+其他数据),另一个包含与人相关的标签。
人:
person_id name other ...
1 Name 1 ...
2 Name 2 ...
3 Name 3 ...
...
标记:
person_id tag_id
1 2
1 3
2 6
1 7
2 8
1 1
...
我想同时从两个表中选择信息,结果如下:
person_id = 1,name = Name 1,tag_id = [2,3,7,1]
这样我就可以使用Spring JDBC RowMapper执行以下操作:
@Override
public PersonDetails mapRow(ResultSet rs, int rowNum) throws SQLException {
PersonDetails personDetails = new GameDetails();
personDetails.setId(rs.getLong("person_id"));
personDetails.setName(rs.getString("name"));
personDetails.setTags((int[]) rs.getArray("tag_id").getArray());
return personDetails;
}
答案 0 :(得分:1)
尝试以下方法:
SELECT
t.person_id,
p.name,
GROUP_CONCAT(t.tag_id SEPARATOR ',') `tag_id`
FROM
tags t
JOIN people p ON t.person_id = p.person_id
GROUP BY
t.person_id
这将导致
person_id name tag_id
1 Name1 3,7,1,2
2 Name2 6,8
答案 1 :(得分:1)
由于您刚刚返回PersonDetails
我假设您的查询假设只返回一个PersonDetails
而不是它的列表。为此,您可以选择执行以下操作
SELECT * FROM people p INNER JOIN标签t ON p.person_id = t.person_id其中p.person_id =“your_person_id”
@Override
public PersonDetails mapRow(ResultSet rs, int rowNum) throws SQLException {
PersonDetails personDetails = new GameDetails();
personDetails.setId(rs.getLong("person_id"));
personDetails.setName(rs.getString("name"));
List<Integer> tagList = new ArrayList<Integer>();
while(rs.next())
{
tagList.add()rs.getInt(tag_id);
personDetails.setTags((int[]) rs.getArray("tag_id").getArray());
}
personDetails.setTags(tagList.toArray());
return personDetails;
}
如果PersonDetails创建HashMap并继续在其中存储对象,即使您想要返回List。对于每次迭代,检查它是否存在于地图中并相应地更新或创建。最后返回map.values(),它应该返回一个List。