码迷,mamicode.com
首页 > 其他好文 > 详细

mybatis多对多关联查询——(十)

时间:2017-08-06 20:37:55      阅读:221      评论:0      收藏:0      [点我收藏+]

标签:ccs   属性   mfs   sid   tfs   pac   rpo   mdt   vdi   

1.需求

查询用户及用户购买商品信息。

2     sql语句

查询主表是:用户表

关联表:由于用户和商品没有直接关联,通过订单和订单明细进行关联,所以关联表:

orders、orderdetail、items

 

SELECT

  orders.*,

  USER.username,

  USER.sex,

  USER.address,

  orderdetail.id orderdetail_id,

  orderdetail.items_id,

  orderdetail.items_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中。

在user类中添加订单列表属性List<Orders> orderslist,将用户创建的订单映射到orderslist

在Orders中添加订单明细列表属性List<OrderDetail>orderdetials,将订单的明细映射到orderdetials

在OrderDetail中添加Items属性,将订单明细所对应的商品映射到Items

 

User.java

技术分享

 

Orders.java

技术分享

Orderdetail.java

技术分享

Items.java

技术分享

 

 

4     mapper.xml

技术分享

 

5    resultMap定义

<!-- 查询用户及购买的商品 -->
    <resultMap type="cn.itcast.mybatis.po.User" id="UserAndItemsResultMap">
        <!-- 用户信息 -->
        <id column="user_id" property="id"/>
        <result column="username" property="username"/>
        <result column="sex" property="sex"/>
        <result column="address" property="address"/>
        
        <!-- 订单信息
        一个用户对应多个订单,使用collection映射
         -->
         <collection property="ordersList" ofType="cn.itcast.mybatis.po.Orders">
             <id column="id" property="id"/>
             <result column="user_id" property="userId"/>
            <result column="number" property="number"/>
            <result column="createtime" property="createtime"/>
            <result column="note" property="note"/>
            
             <!-- 订单明细
         一个订单包括 多个明细
          -->
              <collection property="orderdetails" ofType="cn.itcast.mybatis.po.Orderdetail">
                      <id column="orderdetail_id" property="id"/>
                     <result column="items_id" property="itemsId"/>
                     <result column="items_num" property="itemsNum"/>
                     <result column="orders_id" property="ordersId"/>
                     
                     <!-- 商品信息
              一个订单明细对应一个商品
               -->
                   <association property="items" javaType="cn.itcast.mybatis.po.Items">
                       <id column="items_id" property="id"/>
                       <result column="items_name" property="name"/>
                       <result column="items_detail" property="detail"/>
                       <result column="items_price" property="price"/>
                   </association>
                     
              </collection>
              
                       
         </collection>
        
    
    </resultMap>

 

 

 

 总结:

  一对一的在外键中添加主键对象为其属性,查询的时候外键表为主查询表。比如订单表对用户是一对一,订单中有用户的id为外键,查询的时候在订单中添加一用户属性。然后通过resultMap(单个对象映射用association)或通过Pojo封装进行一对一查询。

  一对多的在一个里面添加多个为List属性,比如订单与订单明细为一对多,在订单中添加一个 private List<Orderdetail> orderdetails; 属性,最后用resultMap进行映射,list用collection映射

  多对多拆分为两个一对多,分析过程与映射过程与上面一样。

 

mybatis多对多关联查询——(十)

标签:ccs   属性   mfs   sid   tfs   pac   rpo   mdt   vdi   

原文地址:http://www.cnblogs.com/qlqwjy/p/7295629.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!