1. 程式人生 > 其它 >資料庫: 商城案例 - 編寫 & 測試 OrdersDao

資料庫: 商城案例 - 編寫 & 測試 OrdersDao

多對一分析

  OrderItem表與Orders表的關係是 多對一

  

之前我們一直是在描述一對多,那麼我們再反向描述一下 多對一

方式是在Orders中應該有一個 集合用來儲存訂單中的訂單項資訊

在Orders類中新增 訂單項的集合

//該訂單中有多少訂單項
    List<OrderItem> orderItems = new ArrayList<OrderItem>();

    public List<OrderItem> getOrderItems() {
        return orderItems;
    }

    public
void setOrderItems(List<OrderItem> orderItems) { this.orderItems = orderItems; }

建立OrdersDao

  • 需求1: 獲取 uid為 001 的使用者的所有訂單資訊

  • 引數 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; } }

測試OrdersDao

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);
        }
    }
}