Parameterizedrowmapper That Maps Object List To Object
I am trying to set the Parent List in a ParameterizedRowMapper how is this written or approached. I have two Objects one for parent and one for children however children contains a
Solution 1:
I will show how to do this for a canonical 1-to-many example, you can adapt it to your vo class / table.
Order class
publicclassOrder{
privateLong orderId;
private String user;
private List<LineItem> items;
// Getter / setter omitted
}
Item class
publicclassLineItem{
private Long lineItemId;
privateString product;
privateint quantity;
// Getter / setter omitted
}
Use two rowmappers one for each class and then use a result set extractor to convert multiple rows into one order + line items
OrderRepository
publicfinalstatic RowMapper<Order> orderMapper = ParameterizedBeanPropertyRowMapper.newInstance(Order.class);
publicfinalstatic RowMapper<LineItem> lineItemMapper = ParameterizedBeanPropertyRowMapper.newInstance(LineItem.class);
public Order findOrderWithItems(Long orderId) {
return jdbcTemplate.query("select * from orders, line_item "
+ " where orders.order_id = line_item.order_id and orders.order_id = ?",
newResultSetExtractor<Order>() {
public Order extractData(ResultSet rs)throws SQLException, DataAccessException {
Orderorder=null;
introw=0;
while (rs.next()) {
if (order == null) {
order = orderMapper.mapRow(rs, row);
}
order.addItem(lineItemMapper.mapRow(rs, row));
row++;
}
return order;
}
}, orderId);
}
public List<Order> findAllOrderWithItmes() {
return jdbcTemplate.query("select * from orders, line_item "
+ " where orders.order_id = line_item.order_id order by orders.order_id",
newResultSetExtractor<List<Order>>() {
public List<Order> extractData(ResultSet rs)throws SQLException, DataAccessException {
List<Order> orders = newArrayList<Order>();
LongorderId=null;
OrdercurrentOrder=null;
intorderIdx=0;
intitemIdx=0;
while (rs.next()) {
// first row or when order changesif (currentOrder == null || !orderId.equals(rs.getLong("order_id"))) {
orderId = rs.getLong("order_id");
currentOrder = orderMapper.mapRow(rs, orderIdx++);
itemIdx = 0;
orders.add(currentOrder);
}
currentOrder.addItem(lineItemMapper.mapRow(rs, itemIdx++));
}
return orders;
}
});
}
Post a Comment for "Parameterizedrowmapper That Maps Object List To Object"