如何通过jdbc模板映射类

时间:2013-11-18 19:53:39

标签: java spring jdbctemplate

一个表包含三列: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
}

2 个答案:

答案 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;
    }
}

沿着这些方向发展。