左连接查询(级联查询)

回顾一下:左连接查询,将左边表(order)里的全部内容查出,右边表(customer)查满足条件的。

SELECT * FROM `order` AS o LEFT JOIN `customer` AS c on o.cust_id = c.cust_id;

那么在 MyBatis 中如何查询呢?

首先我们已经将 domain 类与数据库属性对应,并且创建好了 Mapper 工程,主要来看看 Mapper 的内容:

在 OrderMapper 接口中我们定义了查询所有的订单的操作。

OrderMapper 映射文件中,我们实现了 SQL 语句。

问题在于,通过上面数据库中左连接查询的结果,我们已经知道,左连接会查出左边表(order表)的全部内容,右边表(custoer表)里满足条件的内容,所以查询出来的结果集将包含两个表的内容,此时我们的 resultType 无法直接写,我们需要利用 resultMap 自己封装一个结果集,如下图:

级联赋值方法一:

注:蓝线圈出的部分是可以省略的部分,由于这是 order 的表,所以自己的属性可以省略。

级联赋值方法二:association
一般来说,这种方法更常用,因为它支持分步查询用这种方法, order 属性不可省略

来到测试类中查询一下:

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

association 分步查询

首先回顾一下:分布查询就是查询出一条语句后,根据这条语句的查询结果,继续进行查询。

如下,我们先查询出了 order 中的结果,然后我们再根据 order 中查询出的 cust_id = 2,来查询 customer 中的结果。

在 MyBatis 中实现分步查询需要利用 association

我们要根据 order_id 查出订单的信息,再根据订单信息中的 cust_id 查出客户的信息。

我们首先实现 根据 cust_id 查询客户,再将这个作为查询的第二步,放入分步查询中。
在 CustomerMapper 接口中定义根据 cust_id 查询客户的方法:

在 CustomerMapper 映射文件中实现 SQL。

在 OrderMapper 接口中定义根据 order_id 查询客户信息的方法。

在 OrderMapper 映射文件中,实现根据 SQL。并且将上面的根据 cust_id 查询用户写入 resultMap 中的 association 中,实现了分步查询。

来到测试类,使用分步查询:

运行结果:分步查询成功,通过 order_id 查询出了 customer 的信息。

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

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

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

  2. c语言更新数据,sqlite学习笔记10:C语言中使用sqlite之查询和更新数据

    前面说到的 sqlite_exec() 中的第三个参数, SQLite 将为 sql 参数内执行的每个 SELECT 语句中处理的每个记录调用这个回调函数. 本节添加了两个函数,selectFromT ...

  3. 【MyBatis笔记】17-多对多做左连接查询(查询老师,并且把关联的学生也查出来)

    多对多左连接查询 左连接查询 老师对学生是多对多的关系,把中心放在老师上,一个老师可以教多个学生,实际上老师对学生也可以理解为一对多的关系. 左连接查询 场景:查询老师,并且把关联的学生也查出来. T ...

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

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

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

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

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

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

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

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

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

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

  9. mybatis手写多对多关联映射

    mybatis手写多对多关联映射 1.一对一关联查询 1.1resultType实现 1.2resultMap实现 2.一对多关联查询 3.多对多关联查询 4.resultType与resultMap ...

  10. oracle 左连接

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

最新文章

  1. php显示服务器文件,php-无法显示从新服务器下载文件的进度(在以前的服务器上工作)...
  2. pyplot绘图标题错误处理
  3. C# 命令行编译器详解
  4. 【转】C++学习三 模板类出错总结(Missing template arguments before ‘L‘)
  5. 【Matlab】private文件夹
  6. linux下apache+openssl配置记录
  7. 使用该JavaBean可以将数据在JSP页面中以表格的形式显示出来 并具有动态排序 动态生成查询 自动分页功能
  8. 一个C++的ElasticSearch Client
  9. VMware vSphere Hypervisor下载
  10. js之事件冒泡和事件捕获详细介绍
  11. 服务器搭建说明以及接口调用文档
  12. oracle if函数嵌套,Oracle nullif函数的使用
  13. Unity3d C#解决transform.LookAt朝向前后翻转问题(含源码)
  14. python做交易软件_我用Python做了个量化交易工具!
  15. Redis 的过期策略是如何实现的?
  16. css元素的水平与垂直布局
  17. 【网络攻防原理与技术】第3章:网络侦察技术
  18. C++ 实现tring字符串trim函数和split函数
  19. 基于JavaEE大学生二手交易平台
  20. 【如何让文档左侧显示目录】

热门文章

  1. 人跟人的格局真的是不一样的
  2. 几行代码轻松搞定跨系统传递 traceId
  3. 电池技术为什么如此高深莫测,以至于一直是手机等相关行业的短板?
  4. python入门——P44魔法方法:简单定制
  5. linux svn 设置propertise
  6. sql server锁异常_SQL Server中异常处理的背景
  7. 构建Electron的常见问题(Mac)
  8. UBNT ex-r +netgear gs105e v2 +ap 设置vlan 步骤记录 及相关知识整理
  9. 清除定时器 和 vue 中遇到的定时器setTimeout setInterval问题
  10. MPLAB IDE 编译器文件归类整理