数据库: 商城案例 - 编写 & 测试 OrdersDao
之前我们一直是在描述一对多,那么我们再反向描述一下 多对一
方式是在Orders中应该有一个 集合用来保存订单中的订单项信息
在Orders类中添加 订单项的集合
//该订单中有多少订单项 List<OrderItem> orderItems = new ArrayList<OrderItem>(); public List<OrderItem> getOrderItems() { return orderItems; } public void setOrderItems(List<OrderItem> orderItems) { this.orderItems = orderItems; }
-
-
参数 uid, 返回值 LIst<Orders> 订单集合
-
需求2: 获取订单编号为 order001的订单中的所有商品信息
-
参数 oid, 返回值List<Product>
-
-- 获取订单编号为: order001的订单中的所有商品信息 -- 1.查询订单项表中 oid是order001的 所有商品信息 SELECT oi.pid FROM orderitem oi WHERE oid = 'order001'; -- 2.将上面的查询语句作为in函数的条件, 查询product表 SELECT * FROM product WHERE pid IN (SELECT oi.pid FROM orderitem oi WHERE oid = 'order001');
public class OrdersDao { //需求1: 获取 uid为 001 的用户的所有订单信息 public List<Orders> findAllOrders(String uid) throws SQLException { QueryRunner qr = new QueryRunner(DruidUtils.getDataSource()); String sql = "select * from orders where uid = ?"; //一个用户所有的订单信息 List<Orders> ordersList = qr.query(sql, new BeanListHandler<Orders>(Orders.class), uid); return ordersList; } //需求2: 获取订单编号为 order001的订单中的所有商品信息 public List<Product> findOrderById(String oid) throws SQLException { QueryRunner qr = new QueryRunner(DruidUtils.getDataSource()); //1.查询订单项表 获取订单项表中 订单ID为order001的数据 String sql = "SELECT pid FROM orderitem WHERE oid = ? "; //2.查询的结果是 多条订单项数据 List<OrderItem> list = qr.query(sql, new BeanListHandler<OrderItem>(OrderItem.class), oid); //3.创建集合保存商品信息 List<Product> productList = new ArrayList<>(); ProductDao productDao = new ProductDao(); //4.遍历订单项集合 获取Pid for (OrderItem orderItem : list) { //4.1从orderitem中获取 pid String pid = orderItem.getPid(); //4.2 调用productDao Product product = productDao.findProductById(pid); //4.3 保存到集合 productList.add(product); } //返回 订单中对应的商品信息 return productList; } }
public class TestOrderDao { OrdersDao ordersDao = new OrdersDao(); //1.获取 uid为 001 的用户的所有订单信息 @Test public void testFindAllOrders() throws SQLException { List<Orders> allOrders = ordersDao.findAllOrders("001"); //遍历打印订单信息 for (Orders order : allOrders) { System.out.println(order); } } //测试 获取订单编号为: order001的订单中的所有商品信息 @Test public void testFindOrderById() throws SQLException { List<Product> list = ordersDao.findOrderById("order001"); System.out.println("订单编号为order001中的商品有: "); for (Product product : list) { System.out.println(product); } } }
综合案例 - 练习