首页 > 代码库 > mybatis多对多关联查询——(十)

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

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_priceFROM  orders,  USER,  orderdetail,  itemsWHERE 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多对多关联查询——(十)