gpt4 book ai didi

java - JDBC 模板 - 一对多

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:40:19 29 4
gpt4 key购买 nike

我有一个看起来像这样的类。我需要从两个数据库表中填充它,如下所示。有什么首选方法可以做到这一点吗?

我的想法是有一个服务类来选择一个List<>通过 ResultSetExtractor来自 DAO。然后做一个foreach在该列表上,然后选择 List<>通过另一个人发送给个人的电子邮件 ResultSetExtractor , 并将其附加到 foreach循环。

是否有更好的方法,或者这已经是最好的方法了吗?

public class Person {
private String personId;
private String Name;
private ArrayList<String> emails;
}


create table Person (
person_id varchar2(10),
name varchar2(30)
);


create table email (
person_id varchar2(10),
email varchar2(30)
);

最佳答案

这最好通过 ORM 来解决。使用 JDBC,您必须手动完成 ORM 会为您完成的工作。执行 N + 1 个查询是非常低效的。您应该执行单个查询,然后手动构建对象。麻烦,但不难:

select person.id, person.name, email.email from person person
left join email on person.id = email.person_id

...

Map<Long, Person> personsById = new HashMap<>();
while (rs.next()) {
Long id = rs.getLong("id");
String name = rs.getString("name");
String email = rs.getString("email");
Person person = personsById.get(id);
if (person == null) {
person = new Person(id, name);
personsById.put(person.getId(), person);
}
person.addEmail(email);
}
Collection<Person> persons = personsById.values();

关于java - JDBC 模板 - 一对多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16461735/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com