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

    综合案例 - 练习

     

     

     

  • 相关阅读:
    《编程珠玑》读后感之一
    《梦断代码》读后感之三
    java项目中下载文件文件名乱码
    struts中action与页面之间的传值方式
    使用JSON数据报错和方法
    java中实现将一个数字字符串转换成逗号分隔的数字串, 即从右边开始每三个数字用逗号分隔
    java中判断一个字符在字符串中出现的次数
    使用面向对象(OO)的思想,实现循环输入多个会员的信息,根据会员编号,查找会员积分
    MySQL添加用户、删除用户与授权
    vi编辑器的使用
  • 原文地址:https://www.cnblogs.com/JasperZhao/p/15070992.html
Copyright © 2011-2022 走看看