高级映射-一对多查询-多对多查询

一 一对多查询-概述
1 需求
  • 查询订单及订单明细
2 sql语句:
  • 确定主查询表:订单表 orders
  • 确定关联查询表:订单明细表 Orderdetail
    SELECT
     orders.*,
     user.username,
     user.sex,
     user.address,
     orderdetail.id orderdetail_id,
     orderdetail.items_id,
     orderdetail.item_num,
     orderdetail.orders_id
    FROM
     orders,
     USER,
     orderdetail
    WHERE orders.user_id = user.id AND orderdetail.orders_id=orders.id
高级映射-一对多查询-多对多查询_第1张图片
sql语句执行结果
3 要求
  • 对orders映射不能出现重复记录
4 思路
  • 在orders.java类中添加ListorderDetail属性
  • 最终会将订单信息映射到orders中,订单所对应的订单明细映射到orders中的ordersDetail属性中。
  • 映射成的orders记录数为三条(orders信息不重复)
  • 每个orders中的orderDetails属性存储了该订单所对应的订单明细
二 一对多查询-实现
1 在orders.java类中添加ListOrderdetailBean属性,并生成get和set方法
高级映射-一对多查询-多对多查询_第2张图片
OrdersBean添加List集合
2 OrdersMapperCustom



    
    
        
        
        
        
        
        
        
        
        
            
            
            
            
            
        
    
    
    
        
        


        
        
            
            
            
            
            
        
    
    
    
    
    
    
    

3 OrdersMapperCustom接口
public List findOrdersAndOrderdetailResultMap() throws Exception;
4 OrdersMapperTest 测试
    @Test
    public void findOrdersAndOrderdetailResultMap() throws Exception {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        OrdersMapperCustom ordersMapperCustom = sqlSession.getMapper(OrdersMapperCustom.class);
        List ordersBeans = ordersMapperCustom.findOrdersAndOrderdetailResultMap();
        System.out.println(ordersBeans);
    }
高级映射-一对多查询-多对多查询_第3张图片
测试结果
三 多对多查询-概述
1 需求
  • 查询用户及用户购买商品信息
2 sql语句

查询主表是:用户表
关联表:由于用户和商品没有直接关联,通过订单和订单明细进行关联,所以关联表orders,orderdetail,items

SELECT
     orders.*,
     user.username,
     user.sex,
     user.address,
     orderdetail.id orderdetail_id,
     orderdetail.items_id,
     orderdetail.item_num,
     orderdetail.orders_id,
     items.name items_name,
     items.detail items_detail,
     items.price items_price
    FROM
     orders,
     USER,
     orderdetail,
     items
    WHERE orders.user_id = user.id AND orderdetail.orders_id=orders.id AND orderdetail.items_id = items.id
3 思路
  • 将用户信息映射到user中。
  • 在UserBean类中添加订单列表属性List ordersBean,将用户创建的订单映射到ordersBean。
  • 在OdersBean中添加订单明细列表属性List orderDetailBeans,将订单的明细映射到orderDetailBeans。
  • 在OrderDetail中添加items属性ItemsBean itemsBean,将订单明细所对应的商品映射到itemsBean。
四 多对多查询-实现
1 配置映射
高级映射-一对多查询-多对多查询_第4张图片
将用户信息映射到user中

高级映射-一对多查询-多对多查询_第5张图片
在Oders中添加订单明细列表

高级映射-一对多查询-多对多查询_第6张图片
在OrderDetail中添加items属性
2 OrdersMapperCustom




    
    
        
        
        
        
        
        
        
            
            
            
            
            
            
            
                
                
                
                
                
                
                
                    
                    
                    
                
            
        
    
 
    
    

3 接口
    public List findUserAndItemsResultMap() throws Exception;
4 测试
    @Test
    public void findUserAndItemsResultMap() throws Exception {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        OrdersMapperCustom ordersMapperCustom = sqlSession.getMapper(OrdersMapperCustom.class);
        List userBeans  = ordersMapperCustom.findUserAndItemsResultMap();
        System.out.println(userBeans);
    }
高级映射-一对多查询-多对多查询_第7张图片
执行结果

你可能感兴趣的:(高级映射-一对多查询-多对多查询)