• mybatis由浅入深day02_3一对多查询


    一对多查询

      3.1 需求(查询订单及订单明细的信息)

    查询订单及订单明细的信息。

      3.2 sql语句

    确定主查询表:订单表

    确定关联查询表:订单明细表

    在一对一查询基础上添加订单明细表关联即可。

    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

      

      3.3 分析

    使用resultType将上边的查询结果映射到pojo中,订单信息的就是重复。

      

    要求:

    对orders映射不能出现重复记录。

    在orders.java类中添加List<orderDetail> orderDetails属性。

    最终会将订单信息映射到orders中,订单所对应的订单明细映射到orders中的orderDetails属性中。

      

    映射成的orders记录数为两条(orders信息不重复)

    每个orders中的orderDetails属性存储了该订单所对应的订单明细。

      

      3.4 在orders中添加list订单明细属性

      

      3.5 mapper.xml

      

      3.6 resultMap定义

      

    collection部分定义了查询订单明细信息。

    collection:表示关联查询结果集

    property="orderdetails"关联查询的结果集存储在cn.itcast.mybatis.po.Orders上哪个属性。

    ofType="cn.itcast.mybatis.po.Orderdetail"指定关联查询的结果集中的对象类型即List中的对象类型。

    <id />及<result/>的意义同一对一查询。

      3.7 mapper.java

      

      3.8 测试代码

      3.9 小结

    mybatis使用resultMap的collection对关联查询的多条记录映射到一个list集合属性中。

    使用resultType实现:

    将订单明细映射到orders中的orderdetails中,需要自己处理,使用双重循环遍历,去掉重复记录,将订单明细放在orderdetails中。

  • 相关阅读:
    python 利用正则表达的式提取特定数据如手机号
    python 横向比较最大值 贴标签
    Go语言基础之17--Redis基本操作
    Mysql5.7.20源码编译安装
    Go语言基础之16--Mysql基本操作
    Go语言学习包(1)之bufio包
    Go语言基础之15--文件基本操作
    Go语言基础练习题系列5
    Go语言基础之14--Waitgroup和原子操作
    Go语言基础之13--线程安全及互斥锁和读写锁
  • 原文地址:https://www.cnblogs.com/justdoitba/p/8051676.html
Copyright © 2020-2023  润新知