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

    综合案例 - 练习

     

     

     

  • 相关阅读:
    LeetCode Single Number
    Leetcode Populating Next Right Pointers in Each Node
    LeetCode Permutations
    Leetcode Sum Root to Leaf Numbers
    LeetCode Candy
    LeetCode Sort List
    LeetCode Remove Duplicates from Sorted List II
    LeetCode Remove Duplicates from Sorted List
    spring MVC HandlerInterceptorAdapter
    yum
  • 原文地址:https://www.cnblogs.com/JasperZhao/p/15070992.html
Copyright © 2011-2022 走看看