我们使用的是spring jdbc模板(4.1.x),我们的父级是Customer,我们之间存在嵌套关系。客户可以有0个或更多订单。每个订单可以有1个或多个lineitems。每个订单项都可以包含一个详细信息和状态。
我们正在寻找的是map sql查询结果(一个带多个连接的查询)来映射这些实体。
有谁知道如何在行级别上完成它?
答案 0 :(得分:0)
您可以使用ResultSetExtractor。然后,您可以通过迭代来以常规方式处理ResultSet。但是,您可以重用RowMapper类以避免重复该代码。
示例:
public class OrderExtractor implements ResultSetExtractor {
public List<Customer> extractData(ResultSet rs) throws SQLException, DataAccessException {
Map<Number, Customer> customers = new HashMap<>();
CustomerMapper customerMapper = new CustomerMapper();
OrderMapper orderMapper = new OrderMapper();
LineItemMapper lineItemMapper = new LineItemMapper();
while (rs.next()) {
Customer customer = customerMapper.mapRow(rs, -1);
if (!customers.containsKey(customer.getCustomerId())) {
customers.put(customer.getCustomerId(), customer);
} else {
customer = customers.get(customer.getCustomerId());
}
Order order = orderMapper.mapRow(rs, -1);
if (!customer.hasOrder(order.getNumber())) {
customer.addOrder(order);
} else {
order = customer.getOrder(order.getNumber());
}
LineItem lineItem = lineItemMapper.mapRow(rs, -1);
if (!order.hasLineItem(lineItem.getNumber())) {
order.addLineItem(lineItem);
}
// Add other child entities here
}
return new ArrayList<>(customers.values());
}
}