資料庫: 商城案例 - 編寫 & 測試 OrdersDao
阿新 • • 發佈:2021-07-28
之前我們一直是在描述一對多,那麼我們再反向描述一下 多對一
方式是在Orders中應該有一個 集合用來儲存訂單中的訂單項資訊
在Orders類中新增 訂單項的集合
//該訂單中有多少訂單項 List<OrderItem> orderItems = new ArrayList<OrderItem>(); public List<OrderItem> getOrderItems() { return orderItems; } publicvoid 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); } } }