1. 程式人生 > >jsp對應資料庫,基礎 多表查詢出現的問題

jsp對應資料庫,基礎 多表查詢出現的問題

多表查詢出現的問題
傳統方式查詢的弊端 也就是結果集的封裝問題,這裡凸顯出了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;
	}