多表查询出现的问题
传统方式查询的弊端 也就是结果集的封装问题,这里凸显出了mybatis的优点
多表联查,没办法封装到一个list中,所以就用MapListHandler
private void loadOrderItems(Order order) {
try {
//两张表 orderItem book
String sql="select * from orderitem i ,book b where i.bid=b.bid and oid=?";
List<Map<String,Object>> mapList=qr.query(sql, new MapListHandler(), order.getOid());
List<OrderItem> orderItemList=toOrderItemList(mapList);
order.setOrderItemList(orderItemList);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
maplist 是多个map
* 每个map对应 一行多表查询的记录
* 你给我一个mapList,我遍历每一个map
* 需要所得是,使用一个map生成两个对象,orderitem book,然后再建立两者的关系
* 也就是把book设置给orderItem 把orderitem保存起来
* 最终的结果是 mapList–>orderItemList
/*
传一个mapList,遍历每一个map
*/
private List<OrderItem> toOrderItemList(List<Map<String, Object>> mapList) {
List<OrderItem> orderItemList=new ArrayList<OrderItem>();
for (Map<String, Object> map : mapList) {
OrderItem item=toOrderItem(map);
orderItemList.add(item);
}
return orderItemList;
}
/**
* 把一个map转换成一个orderitem
*/
private OrderItem toOrderItem(Map<String, Object> map) {
OrderItem orderItem=CommonUtils.toBean(map, OrderItem.class);
Book book=CommonUtils.toBean(map, Book.class);
orderItem.setBook(book);
return orderItem;
}