一个表包含三列:Order, Item and price
我可以通过Jdbc Template
访问并尝试使用DTO进行映射。
Order Item Price
101 "xyz" 100
101 "Pqr" 150
101 "abc" 125
102 "any" 200
102 "one" 101
我可以将上面的表格映射到我的dto,如下所示,
public class myDTO{
String Order; // Order number
String Item; // item name
String price; // item price
//getter-setter below
}
但我想以这样的方式映射表格,我可以将订单与所有具有共同订单号的商品和价格相关联。我只是简单地概述了预期的DTO课程,但无法映射。
public class requiredDTO{
String order;
List<String> value;
List<String> price;
//getter setter below
}
答案 0 :(得分:1)
使用'BeanPropertyRowMapper'您的列名必须与MyDTO的属性名匹配。
getJdbcTemplate().query("SELECT Order, Item, Price FROM your_table", new BeanPropertyRowMapper(MyDTO.class));
然后我建议你稍后在java中使用组逻辑。
祝你好运!
答案 1 :(得分:1)
你不想要你的任何一个解决方案......你想要什么(恕我直言如下)
public class Order {
private long id;
private Set<Item> items;
}
public class Item {
private String name;
private long price;
}
使用ResultSetExtractor创建List<Order>
。
public OrderResultSetExtractor implement ResultSetExtractor<List<Order>> {
public List<Order> extractData(ResultSet rs) throws SQLException, DataAccessException {
List<Order> orders = new ArrayList<Order>();
Order current = null;
while (rs.next()) {
long orderId = rs.getLong(1);
String itemName = rs.getString(2);
long price = rs.getLong(3);
if (current == null || current.getId() != orderId) {
current = new Order();
current.setId(orderId);
orders.add(current);
}
current.getItems().add(new Item(itemName, price));
}
return orders;
}
}
沿着这些方向发展。