查询所有客户以及对应的订单

  • 左连接查询(不支持懒加载)
  • 分步查询(支持懒加载)

左连接查询(不支持懒加载)

场景:我们想要查询出所有的客户,并且把每个客户对应的订单也查出来。这时候可以使用左连接查询。

那么如何在 MyBatis 中实现左连接查询呢?

给客户的 domain 增添一个字段来表示对应的订单:private List<Order> orders = new ArrayList<>();

@Setter
@Getter  //使用注解生成 get 与 set 方法
@ToString
public class Customer {private Integer cust_id;private String cust_name;private String cust_profession;private String cust_phone;private String email;private List<Order> orders = new ArrayList<>(); // 对应的订单
}

在 CustomerMapper 接口类中添加方法:

/*查询客户和订单*/
public List<Customer> getAllCustomer();

在 CustomerMapper 映射文件中写 SQL:由于查询结果既包含客户又包含订单,我们需要用 resultMap 来自定义结果集。
与之前查询订单(多)附带客户(一)的 association 相对于,这里查询客户(一)附带订单(多)需要 collection 标签

代码如下:

<!--自定义结果集-->
<resultMap id="custMap" type="customer"><id column="cust_id" property="cust_id"/><result column="cust_name" property="cust_name"/><result column="cust_phone" property="cust_phone"/><result column="cust_profession" property="cust_profession"/><result column="email" property="email"/><collection property="orders" ofType="Order"><id column="order_id" property="order_id"/><result column="order_name" property="order_name"/><result column="order_num" property="order_num"/></collection>
</resultMap><!--查询所有客户和订单-->
<select id="getAllCustomer" resultMap="custMap"> /*使用自定义的结果集*/SELECT * FROM `customer` AS c LEFT JOIN `order` AS o ON c.cust_id = o.cust_id;
</select>

测试类中:

public void test4(){SqlSession sqlSession = MybatisUtils.openSession();CustomerMapper customerMapper = sqlSession.getMapper(CustomerMapper.class);List<Customer> allCustomer = customerMapper.getAllCustomer();for (Customer customer : allCustomer) {System.out.println(customer);}sqlSession.close();
}

运行结果:成功查询出所有的客户与他们对应的订单。

分步查询(支持懒加载)

分步查询也可以达到我们的要求,先查出所有客户的信息,再根据查出的客户的 cust_id 去查订单。

OrderMapper 接口中定义根据 cust_id 查询订单的方法:

OrderMapper 映射文件中写 SQL:

定义好接口中的方法后,CustomerMapper 映射文件中写 SQL,利用 collection 实现分步查询(与之前的 association 类似)

测试类中:

运行结果:每个查询出来的用户,都会再根据他的 cust_id 去查询订单。但是由图可见,会产生很多的 sql 语句。(左连接只需要一句SQL)

【MyBatis笔记】13-一对多左连接查询分步查询(查询所有客户及客户对应的订单)相关推荐

  1. 13-一对多左连接查询分步查询(查询所有客户及客户对应的订单)

    查询所有客户以及对应的订单 目录 左连接查询(不支持懒加载) 分步查询(支持懒加载) 左连接查询(不支持懒加载) 场景:我们想要查询出所有的客户,并且把每个客户对应的订单也查出来.这时候可以使用左连接 ...

  2. mysql update 左连接_使用左连接的MySQL更新查询

    表格式 表名:file_manager_folder Rows:id,parentId,name 我的查询模拟将文件夹移动到另一个文件夹,并使用IN(?)接受数组. 如果没有相同的parentId和n ...

  3. mysql的语句分类,查询、子查询及连接查询

    一.mysql查询的五种子句 where(条件查询).having(筛选).group by(分组).order by(排序).limit(限制结果数)  1.where常用运算符: 比较运算符 &g ...

  4. mysql的查询、子查询及连接查询

    一.mysql查询的五种子句 where(条件查询).having(筛选).group by(分组).order by(排序).limit(限制结果数)  1.where常用运算符: 比较运算符 &g ...

  5. mysql的查询、子查询、连接查询、groud by分组查询

    一.mysql查询的五种子句 where(条件查询).having(筛选).group by(分组).order by(排序).limit(限制结果数)  1.where常用运算符: 比较运算符 &g ...

  6. oracle使用left join,Oracle左连接left join的实际操作步骤

    以下的文章主要是介绍Oracle左连接left join 与右连接right join的实际操作步骤,如果你对Oracle左连接left join 与右连接right join的实际操作步骤相关的实际 ...

  7. oracle 左连接

    oracle左连接小结 当使用左连接关联表进行查询时,如果右侧的表在关联的条件中有重复的数据,就会导致最后的查询结果比预期的多,比如: select * from A 需要关联的表 select * ...

  8. MySQL 查询、子查询及连接查询

    文章目录 一.mysql查询的五种子句 1.where常用运算符: 2.group by 分组 (1)max:求最大值 (2)min:求最小值 (3)sum:求总数和 (4)avg:求平均值 (5)c ...

  9. 【MyBatis笔记】10-多对一左连接查询分步查询(查询所有订单及订单对应的客户)

    左连接查询(级联查询) 回顾一下:左连接查询,将左边表(order)里的全部内容查出,右边表(customer)查满足条件的. SELECT * FROM `order` AS o LEFT JOIN ...

最新文章

  1. django基本操作
  2. boost::io模块ios相关的测试程序
  3. 李洪强漫谈iOS开发[C语言-038]-if else if语句
  4. mlp 参数调优_积神经网络(CNN)的参数优化方法
  5. 默认方法:Java 8的无名英雄
  6. Tiny Wings 为什么能迅速成为 iOS App Store 付费应用第一名?
  7. java 中导出word后压缩文件_Java批量导出word压缩后的zip文件案例
  8. 网络服务器虚拟化技术,网络虚拟化技术
  9. 洛克人html5,《洛克人Zero/Zx合集》:跳票冷饭,与预期有差但依旧很香
  10. 时间服务器+注册表,注册表缺失导致Windows Server 2008 R2时钟服务W32time不能自启
  11. 使用 Document!X 为自己的dll生成一个漂亮的说明文档
  12. ThinkPHP3.2.3从php5升级到php7艰辛之路
  13. VGG16网络,VGG19
  14. js日期时间格式化yyyy-mm-dd hh:ii:ss
  15. java版如何使区块常加载,我的世界如何设置加载区块 | 手游网游页游攻略大全...
  16. [译]AngularJS1.3.0 开发者指南(四) -- 控制器
  17. 终极 Shell on-zshrc
  18. 平行时代的平行智能体系(王飞跃)
  19. VB.net写的音乐播放器,带百度翻译歌词
  20. KT142A语音芯片IC的固件升级方法详细描述,PC升级和U盘升级

热门文章

  1. 赚钱的公式是资源加经营
  2. 抖音为什么能让人上瘾?
  3. The idea of ​​router network configuration
  4. 第四次作业:猫狗大战挑战赛
  5. elfutils库交叉编译
  6. ssrs 数据分页_如何在SSRS中使用JSON数据
  7. sql server 群集_设计有效SQL Server群集索引
  8. t-sql存储过程_使用T-SQL进行存储过程中ORDER BY的精确控制
  9. new一个对象的过程
  10. 树的基本定义表示方法