###Jsp+Servlet购物商城day04.1:显示订单。【重中之重:查询3张表信息,封装到Order】

首先有个练习:【根据一个oid,查询一个Order】

练习,main代码:

//==######=练习:【三层关联关系查询(三张表),必须使用两个SQL。】
	public static void main(String[] args) throws Exception {
		//根据一个订单oid,查询一个订单的详细信息。
		//oid = 18da794cd36e46ed96b5bc6667c7efbb
		QueryRunner qr = new QueryRunner(C3p0Utils.getDataSource());
		String sql = "select * from orders where oid = ?";
		Orders orders = qr.query(sql, new BeanHandler<Orders>(Orders.class),"6e66b0ae4a4143fe99a30e4602f43355");
		//System.out.println(orders);
		//根据一个订单oid,查询一个商品的详细信息。
				//===######=多表查询OrderItem和Product信息,【外连接多表查询,还能使用  where条件对结果集过滤。】
		String sql2 = "SELECT * FROM orderitem LEFT OUTER JOIN PRODUCT ON orderitem.pid = product.pid WHERE oid = '6e66b0ae4a4143fe99a30e4602f43355'";
		List<Map<String, Object>> list = qr.query(sql2, new MapListHandler());
		
		//===封装OrderItem。两张表数据封装。
				/*
				private List<OrderItem> orderItems;//==teacher
				===######=======为什么,CartItem用LinkedHashMap<String,CartItem>,
				而OrderItem使用List<OrderItem>?
				(前面说过,哪种集合都可以实现,实现复杂度不同。如何选择集合,实现最简单的集合呢?)其实都差不多。
				LinkedHashMap<String,OrderItem> ois;//==self
				 * */
		List<OrderItem> oList = new ArrayList<OrderItem>();
		for(Map m : list){
			OrderItem oi = new OrderItem();
			MyBeanUtils.setObject(oi, m);
			Product pro = new Product();
			MyBeanUtils.setObject(pro, m);
			//===封装OrderItem。完毕
			oi.setPro(pro);
			oList.add(oi);
		}
		//===封装Order。完毕
		orders.setOis(oList);
		
		System.out.println(orders);
		List<OrderItem> ois = orders.getOis();
		for(OrderItem oi : ois){
			System.out.println(oi);
		}
	}
	//==######=练习:【三层关联关系查询(三张表),必须使用两个SQL。】----老师代码:去掉注释。
	public static void main2(String[] args) throws Exception {
		//根据一个订单oid,查询一个订单的详细信息。
		//oid = 18da794cd36e46ed96b5bc6667c7efbb
		QueryRunner qr = new QueryRunner(C3p0Utils.getDataSource());
		String sql = "select * from orders where oid = ?";
		Orders orders = qr.query(sql, new BeanHandler<Orders>(Orders.class),"6e66b0ae4a4143fe99a30e4602f43355");
		//System.out.println(orders);
		//根据一个订单oid,查询一个商品的详细信息。
		String sql2 = "SELECT * FROM orderitem LEFT OUTER JOIN PRODUCT ON orderitem.pid = product.pid WHERE oid = '6e66b0ae4a4143fe99a30e4602f43355'";
		List<Map<String, Object>> list = qr.query(sql2, new MapListHandler());
		
		//===封装OrderItem。两张表数据封装。
		List<OrderItem> oList = new ArrayList<OrderItem>();
		for(Map m : list){
			OrderItem oi = new OrderItem();
			MyBeanUtils.setObject(oi, m);
			Product pro = new Product();
			MyBeanUtils.setObject(pro, m);
			//===封装OrderItem。完毕
			oi.setPro(pro);
			oList.add(oi);
		}
		//===封装Order。完毕
		orders.setOis(oList);
		
		System.out.println(orders);
		List<OrderItem> ois = orders.getOis();
		for(OrderItem oi : ois){
			System.out.println(oi);
		}
	}

===######=借鉴思想:

封装层次关系(表关系):order(  orderItem(product) )。

查询三张表,【三层数据封装思想】:

先查出主表Order基本信息,封装Order对象(信息不全,后面再加依赖);

再查出 下面两层 表OrderItem和Product的信息(外连接),封装OrderItem(OrderItem信息完整,封装了Product)。】


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值