从2个或更多数据库表到一个Java对象的数据

时间:2014-10-05 01:02:21

标签: java spring jdbc spring-jdbc jdbctemplate

假设我有一个像这样的数据库模式(发布图像的声誉不够) http://i.stack.imgur.com/9yT4v.png

如何将这些表及其所有数据连接到一个Java对象?

我知道如何从Person表中创建一个Java对象,但是如何在“addItem”方法下使用它来添加他在其他表中的所有项目(我知道这可能不起作用,但只是为了解释我在找什么?)

public class Person {

private int id;
private String firstname;
private String lastname;
private List<Item> personItems = new ArrayList<Item>();

//getters and setters for id, firstname, lastname

public void addItem(Item item){
    this.personItems.add(item);
}
}

我查询一个人的所有项目:

SELECT p.PersonID, p.Firstname, p.Lastname, i.name
FROM Person as p, PersonItem as pi, Item as i
WHERE p.PersonID=pi.PersonID AND pi.ItemID = i.ItemID AND p.PersonID=?;

因此,如果人有4项,则查询结果为4行。但我真正想要的是一行,所有结果来自“i.name”列。否则“结果大小不正确:预期1,实际4”,将所有结果保存到列表是愚蠢的。

这是我到目前为止使用的一种样式,用于从一个表中创建一个对象。但是现在我需要从其他表到该对象的更多数据。有没有简单的方法来实现这个?

public Person findPerson(int id){
String sql = "select .. from .. where id=?";
Object[] parameters = new Object[]{id};

RowMapper<Person> mapper = new PersonRowMapper();
Person p = jdbcTemplate.queryForObject(sql, parameters, mapper);

    return p;
}

1 个答案:

答案 0 :(得分:0)

将您的查询更改为以下内容:

SELECT i.name
FROM Item as i
WHERE i.ItemID IN (
    SELECT ItemID 
    FROM PersonItem 
    WHERE PersonID IN (
        SELECT PersonID
        FROM Person
        WHERE PersonID = ?
    )
)