gpt4 book ai didi

java - 使用 SimpleJdbcTemplate 干净地创建域对象的对象图

转载 作者:行者123 更新时间:2023-11-30 09:40:09 26 4
gpt4 key购买 nike

对于一个新项目,我们决定使用 Spring MVC 和 JdbcTemplate(特别是 SimpleJdbcTemplate)来持久化域对象。我一直在使用这种方法遇到的一个问题是如何从 SELECT 查询中干净地创建对象图。当我从单个表中提取行时,RowMapper 机制似乎工作得很好;当我映射 JOIN 查询的结果时,我开始担心。

举一个具体的(但完全是捏造的)例子,假设我有两个处于 N 对 1 关系中的实体:

public class Invoice {
private Customer customer;
...
}

public class Customer {
private int id;
private String name;
...
}

我希望能够在我的 InvoiceDAO 上调用 selectInvoices() 方法,并检索填充的 Invoice 列表具有完全形成的 Customer 实例。相反,我发现自己很想做如下事情:

public class Invoice {
// this makes me unhappy
private int customerId;
...
}

彻底实现这一目标的最佳做法是什么?我应该硬着头皮使用 ORM 吗?

最佳答案

这正是 ORM 所擅长的。如果你想自己做,我的诀窍是用一张 map 来容纳客户:

Map<Long, Customer> customersById = new HashMap<Long, Customer>();
...
public Invoice mapRow(ResultSet rs, int rowNum) throws SQLException {
Invoice invoice = ...
// populate invoice fields
Long customerId = rs.getLong("customerId");
Customer c = customersById.get(customerId);
if (c == null) {
// first time we meet this customer
c = ...
// populate customer fields from result set
customersById.put(customerId, c);
}
invoice.setCustomer(c);
}

关于java - 使用 SimpleJdbcTemplate 干净地创建域对象的对象图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9548267/

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