Skip to content Skip to sidebar Skip to footer

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"