zoukankan      html  css  js  c++  java
  • 数据库: 商城案例

    多对一分析

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

    综合案例 - 练习

     

     

     

  • 相关阅读:
    【C++类与对象】实验四(二)
    【微信小程序——开发步骤1】
    【C++/实验三】类和对象
    【C++/类与对象总结】
    【C++/函数】实验2
    食堂APP-项目开发 语音输入(1)
    食堂APP-项目开发及踩坑记录(7)
    食堂APP-项目开发及踩坑记录(6)
    食堂APP-项目开发及踩坑记录(5)
    食堂APP-项目开发及踩坑记录(4)
  • 原文地址:https://www.cnblogs.com/JasperZhao/p/15070992.html
Copyright © 2011-2022 走看看