源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

mybatis一对多查询功能

  • 时间:2021-03-20 13:24 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:mybatis一对多查询功能
 首先,我们还是先给出一个需求:根据订单id查询订单明细——我们知道,一个订单里面可以有多个订单的明细(需求不明确的同学,请留言或者去淘宝网上的订单处点一下就知道了)。这个时候,一个订单,对应多个订单的id。这种需求出现的时候,我们应该如何查询呢?   此时我们的数据模型如下图(左)由于查询用户也是我们的需求,所以就在原有的[url=http://www.1sucai.cn/article/106005.htm]基础上进行扩展[/url],数据模型如下(右): [img]http://files.jb51.net/file_images/article/201702/2017021811031918.png[/img] [img]http://files.jb51.net/file_images/article/201702/2017021811031919.png[/img]     很显然,如果用resultType的方式去实现的话,是不合理的了。因为我们需要创建一个既有订单又有订单明细的pojo然后呢,我们的mybatis框架会为我们映射出很多个pojo对象(有多少个订单明细就有多少个对象)。     所以我们需要使用resultMap的方式进行处理。解决问题的思路是:在orders类中增加一个订单明细的List字段将list的类型定义为Orderdetail类型。然后通过配置文件,将得到的数据,通过resultMap的collection标签进行映射到list中。     具体实现如下: [b]  sql语句[/b]     确定主查询表:订单表     确定关联查询表:订单明细表     在[url=http://www.1sucai.cn/article/106005.htm]一对一查询[/url]基础上添加订单明细表关联即可。
SELECT 
 orders.*,
 USER.username,
 USER.sex,
 USER.address,
 orderdetail.id orderdetail_id,
 orderdetail.items_id,
 orderdetail.items_num,
 orderdetail.orders_id
FROM
 orders,
 USER,
 orderdetail
WHERE orders.user_id = user.id AND orderdetail.orders_id=orders.id
[b]  问题展示[/b]     查询完毕以后,我们发现了一个问题:如图所示,我们的id出现了多条,这是因为数据库中对应的多个订单详情共同使用一个订单id导致的。这就导致了每条记录中都会出现一个orders的记录。具体解决办法,开始的时候就说了,这里就不再赘述了。 [img]http://files.jb51.net/file_images/article/201702/2017021811031920.png[/img]   在orders中添加list订单明细属性   [img]http://files.jb51.net/file_images/article/201702/2017021811031921.png[/img]        [b]定义resultMap[/b]
<!-- 订单及订单明细的resultMap
  使用extends继承,不用再重复用户的映射
   -->
  <resultMap type="cn.itcast.mybatis.po.Orders" id="dinxtends="OrdersUserResultMap">
    <!-- 订单信息 -->
    <!-- 用户信息 -->
    <!-- 使用extends继承,不用在中配置订单信息和用户信息的映射 -->
    <!-- 订单明细信息
    一个订单关联查询出了多条明细,要使用collection进行映射
    collection:对关联查询到多条记录映射到集合对象中
    property:将关联查询到多条记录映射到cn.itcast.mybatis.po.Orders哪个属性
    ofType:指定映射到list集合属性中pojo的类型
     -->
     <collection property="orderdetails" ofType="cn.itcast.mybatis.po.Orderdetail">
       <!-- id:订单明细唯 一标识
       property:要将订单明细的唯 一标识 映射到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"/>
     </collection>
  </resultMap>
   [img]http://files.jb51.net/file_images/article/201702/2017021811031922.png[/img]       [b]mapper  [/b] [img]http://files.jb51.net/file_images/article/201702/2017021811031923.png[/img]    [b]  总结[/b]     其实就是使用resultMap的collection对关联查询的多条记录映射到一个list集合属性中。 以上所述是小编给大家介绍的mybatis一对多查询功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程素材网网站的支持!
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部