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

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

目录

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

 

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

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

那么如何在 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)
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/322375.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实战 | 利用Delta Lake使Spark SQL支持跨表CRUD操作

转载自 实战 | 利用Delta Lake使Spark SQL支持跨表CRUD操作 供稿 | eBay ADI-Carmel Team 作者 | 金澜涛 编辑 | 顾欣怡 本文7309字&#xff0c;预计阅读时间22分钟 导读 本文介绍eBay Carmel团队利用Delta Lake&#xff0c;使Spark SQL支持Teradata的Update/Delete语法。…

14-多对多关系建表

多对多关系建表 目录 多对多关系多对多关系建表原则domain多对多关系 一个老师可以教多个学生&#xff0c;一个学生可以被多个老师教。一个学生可以选择多门课程&#xff0c;一门课程可以被多个学生选择。一个用户可以选择多个角色&#xff0c;一个角色可以被多个用户选择。…

DevOps文档中心的技术实践演进

这应该算是《Git企业开发者教程》的篇外篇&#xff0c;介绍一下这个教程是怎样写出来的。相信每个技术人都有类似下面的文件夹&#xff0c;保存着你辛苦工作的成果。实际的感觉&#xff1a;看着闹心&#xff0c;弃之不舍。一份文档久经修改&#xff0c;不能定稿&#xff0c;循环…

MySQL UPDATE 语句一个“经典”的坑

转载自 MySQL UPDATE 语句一个“经典”的坑 来源&#xff1a;ju.outofmemory.cn/entry/336774 有问题的SQL语句 why? 倒回去再重试验一把 最近好几次有开发同学在钉钉上问我&#xff0c;比如下图&#xff1a; 问题归纳起来就是&#xff1a;在MySQL里面update一条记录&…

jzoj4803-[NOIP2016提高A组模拟9.28]求导【模拟】

正题 题目大意 求一个标准多项式的求导 解题思路 暴力模拟即可&#xff0c;注意细节即可 一下是贴心的坑爹细节样例 (233x)−>(1)而不是(1)(233x)->(1)而不是(1)(233x)−>(1)而不是(1) (1)−>(0)而不是()(1)->(0)而不是()(1)−>(0)而不是() codecodecode …

g4e基础篇#1 为什么要使用版本控制系统

本篇是Git企业开发者教程基础篇的第一篇1. 基础篇&#xff1a;为什么要使用版本控制系统Git 分布式版本控制系统的优势Git 安装和设置初始化Git存储库(Repo)起步 1 – 创建分支和保存代码起步 2 – 了解Git历史记录起步 3 – 拉取请求 Pull Request 工作机制Git是一种版本控制系…

15-多对多做左连接查询(查询老师,并且把关联的学生也查出来)

多对多左连接查询 目录 左连接查询老师对学生是多对多的关系&#xff0c;把中心放在老师上&#xff0c;一个老师可以教多个学生&#xff0c;实际上老师对学生也可以理解为一对多的关系。 左连接查询 场景&#xff1a;查询老师&#xff0c;并且把关联的学生也查出来。 Teac…

.Net 如何模拟会话级别的信号量,对http接口调用频率进行限制(有demo)

现在&#xff0c;因为种种因素&#xff0c;你必须对一个请求或者方法进行频率上的访问限制。 比如&#xff0c; 你对外提供了一个API接口&#xff0c;注册用户每秒钟最多可以调用100次&#xff0c;非注册用户每秒钟最多可以调用10次。比如&#xff0c; 有一个非常吃服务器资源的…

1.数据湖deltalake初识

转载自 1.数据湖deltalake初识 1.delta特性简介 Delta Lake是Spark计算框架和存储系统之间带有Schema信息数据的存储中间层。它给Spark带来了三个最主要的功能&#xff1a; 第一&#xff0c;Delta Lake使得Spark能支持数据更新和删除功能&#xff1b; 第二&#xff0c;Del…

Quartz.NET 3.0 正式发布

Quartz.NET是一个强大、开源、轻量的作业调度框架&#xff0c;你能够用它来为执行一个作业而创建简单的或复杂的作业调度。它有很多特征&#xff0c;如&#xff1a;数据库支持&#xff0c;集群&#xff0c;插件&#xff0c;支持cron-like表达式等等。在2017年的最后一天Quartz.…

(九)IDEA便捷配置MyBatis.xml文件

在使用IDEA新建mybatis.xml经常需要手动复制粘贴之前的xml配置。这样也比较麻烦。我们可以IDEA进行关于xml的配置 1.创建MyBatis Config的模版 1.打开新增2.查看编辑页面查看编辑页面 我们看到Name&#xff1a;为我们新增模版的文件名称。Extension&#xff1a;为我们新增文件…

用 Identity Server 4 (JWKS 端点和 RS256 算法) 来保护 Python web api

目前正在使用asp.net core 2.0 (主要是web api)做一个项目, 其中一部分功能需要使用js客户端调用python的pandas, 所以需要建立一个python 的 rest api, 我暂时选用了hug, 官网在这: http://www.hug.rest/.目前项目使用的是identity server 4, 还有一些web api和js client.项目…

MySQL死锁如何处理

转载自 MySQL死锁如何处理 前提 笔者负责的一个系统最近有新功能上线后突然在预警模块不定时报出MySQL死锁导致事务回滚。幸亏&#xff0c;上游系统采用了异步推送和同步查询结合的方式&#xff0c;感知到推送失败及时进行了补偿。于是&#xff0c;笔者争取了一点时间详细分析…

(十)IDEA添加mybatis-mapp.xml文件

1.点击file–Settings–Editor–file and Code Templates 2.配置mybatis-mapper.xml的网址,点击file–Settings–ages& Frameworks–Schmas and DTDs 3.创建mapper.xml文件

g4e基础篇#2 Git分布式版本控制系统的优势

1. 基础篇&#xff1a;为什么要使用版本控制系统Git 分布式版本控制系统的优势Git 安装和设置初始化Git存储库(Repo)起步 1 – 创建分支和保存代码起步 2 – 了解Git历史记录起步 3 – 拉取请求 Pull Request 工作机制Git是当前最棒的版本控制系统&#xff0c;已经迅速成为了事…

P4989-二进制之谜【堆,贪心】

正题 题目链接:https://www.luogu.org/problemnew/show/P4989 题目大意 一个二进制数两两配对&#xff0c;要求 配对的数不能交叉(用同一个区间但不包含)0在前1在后 要求配对最多的情况下所有配对的距离之和最远。 解题思路 将0视为左括号&#xff0c;1视为右括号&#xf…

案例分析 | 由Decimal操作计算引发的Spark数据丢失问题

转载自 案例分析 | 由Decimal操作计算引发的Spark数据丢失问题 供稿 | Hadoop Team 编辑 | 顾欣怡 本文3058字&#xff0c;预计阅读时间10分钟 导读 eBay的Hadoop集群上面每天运行着大量Spark计算任务。对于数据计算任务&#xff0c;其计算性能十分重要&#xff0c;数据质…

入门干货之Electron的.NET实现-Electron.NET

0x01、Electron.NET1、介绍Electron是由Github上的一支团队和一群活跃贡献者维护。用HTML&#xff0c;CSS和JavaScript来构建跨平台桌面应用程序的一个开源库。 Electron通过将Chromium和Node.Js合并到同一个运行时环境中&#xff0c;并将其打包为Mac&#xff0c;Windows和Linu…

通过Chocolatey软件包管理器安装.NET Core

在Linux的世界里&#xff0c;有了yum/apt-get百分之九十的软件都可以通过它来安装管理。但是在Windows系统上&#xff0c;装个软件还是挺折腾的。比如我要装个Chrome浏览器&#xff0c;我先得打开IE浏览器吧&#xff0c;我还打不开Chrome的官网吧&#xff0c;得百度吧&#xff…

(十三)RabbitMQ使用详解

RabbitMQ是基于AMQP的一款消息管理系统。AMQP(Advanced Message Queuing Protocol)&#xff0c;是一个提供消息服务的应用层标准高级消息队列协议&#xff0c;其中RabbitMQ就是基于这种协议的一种实现。 常见mq&#xff1a; ActiveMQ&#xff1a;基于JMSRabbitMQ&#xff1a;…