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());
}
}