1.查询多对多

    

        需求:

                查询用户购买的商品,包括用户信息,订单信息,订单详细信息,商品信息

    

     SQL语句:

        

SELECT       user.id,user.username,user.address,      orders.iduser_orders_id,orders.number,orders.note,      orderdetail.idorderdetail_id,orderdetail.items_id,orderdetail.items_num,      items.nameitems_name,items.detail items_detail FROM       user,orders,orderdetail,items WHERE       user.id = orders.user_id       AND orders.id = orderdetail.orders_id       ANDorderdetail.items_id = items.id;

    

        修改domain类(UserMapper.java)

package cn.mybatis.mapper.domain; import java.util.List; /** * 用户的扩展类 * @author刘泽栋 * @date 2015年6月22日下午1:45:15 */publicclass UserExt extends User {     // 这里定义User类的扩展属性    // 一个用户下有多个订单    public List
 orders;     public List
 getOrders(){        returnorders;    }     publicvoidsetOrders(List
orders) {        this.orders = orders;    }   }

    

        在OrdersExt类中添加List<OrderdetailExt>属性(OrdersExt.java)

publicclass OrdersExt extends Orders {    /**     * 添加用户的属性     */    private String username;    private String sex;    private String address;        // 用户信息    private User user;    // 订单明细    private List
 detailList;

        

        编写mapper接口 (UserMapper.java)

//多表查询,查询用户信息,包括订单信息,订单明细,购买商品信息publicList
 findUserByItems();

        编写映射文件(UserMapper.xml)

   
      
      
      
       
      
         
         
         
          
         
            
            
            
             
            
                
                
                                     
   
      SELECT      user.id,user.username,user.address,      orders.id user_orders_id,orders.number,orders.note,      orderdetail.idorderdetail_id,orderdetail.items_id,orderdetail.items_num,      items.name items_name,items.detailitems_detail      FROM      user,orders,orderdetail,items      WHERE      user.id = orders.user_id      AND orders.id = orderdetail.orders_id      AND orderdetail.items_id = items.id   

    

        编写测试代码(UserMapperTest.java)

/**    * 测试多表查询    * 多表查询,查询用户信息,包括订单信息,订单明细,购买商品信息    */   @Test   publicvoidfindUserByItemsTest() throws Exception {      SqlSession sqlSession = sqlSessionFactory.openSession();      UserMapper userMapper = sqlSession.getMapper(UserMapper.class);            List
 listUser = userMapper.findUserByItems();      System.out.println(listUser);            sqlSession.close();   }

    

小结

一对多是多对多的一个特例。

一对多的使用方式中,resultTyperesultMap各自有不同的应用场景:

resultType

      查询用户名称、用户性别、用户地址、商品名称、商品价格。

resultMap

      先查询用户信息,然后鼠标移动上去,显示商品明细信息。

 

resultMap的嵌套查询可以使用延迟加载的功能