mybatis学习五-mybatis的多表联合查询
1. 一对一的关系
首先先看数据库
tb_user
tb_orders
执行这条sql:
也就是查询所有的订单, 并每一个订单都联系上用户数据, 并再一次附上订单的id
也就是说, 从后面看, 就是每个订单id对应的用户信息, 从前面看就是每个订单id的订单信息
为什么说这里是一对一的关系呢?
因为, 订单是副表, 这里查询的是tb_orders, 每条订单只能有一个用户
以上是数据库中的多表联合查询, 那么在代码中应该怎么实现这个多表联合查询呢?
表的实体类
package com.itdong.domain;import java.util.Date;public class Orders {private int id;private Date ordertime;private double total;//不要这么写//private int uid;private User user; //表明这这个订单属于那个用户public int getId() {return id;}public void setId(int id) {this.id = id;}public Date getOrdertime() {return ordertime;}public void setOrdertime(Date ordertime) {this.ordertime = ordertime;}public double getTotal() {return total;}public void setTotal(double total) {this.total = total;}public User getUser() {return user;}public void setUser(User user) {this.user = user;}@Overridepublic String toString() {return "Orders{" +"id=" + id +", ordertime=" + ordertime +", total=" + total +", user=" + user +'}';}
}
为什么这个的属性不是uid, 而是user呢, 因为实际上我们开发时光findAll订单表并没有意义, 而是要多表联合查找, 也就是查询订单表时要联合每一条订单的用户信息, 所以订单表的实体类这里属性不能只是uid, 要user, 因为user里就是用户所有信息
但是这样有出现一个问题, 就是说用我们之前学习的知识来配置时, findAll执行完是这样的, user全是null
为什么呢?
因为我们配置OrdersMapper.xml映射文件是时,
<select id="findAll" resultType="com.itdong.domain.Orders">SELECT * , o.id oid FROM tb_orders o, tb_user u WHERE o.uid = u.id;
</select>
resultType等于的是"com.itdong.domain.Orders"
也就是说, 对于多表查询操作来说, 查询出来的结果往往有其他的表的对象, 例如本例的订单表联合用户表的查询, domain.Orders这个Bean实例中就有一个User属性, 但是mysql中只能查询出字段,并不能帮着将联合查询出来的User表的字段封装成一个对象存并作为属性放进订单表中。
这个时候就要使用框架来配置一个适合这次多表联合查询的结果集。
也就是配置一个resultMap.
除了以上的方法封装User对象
还有一种方法
2. 一对多的多表联合查询
订单表联合用户表是一对一,毕竟一个订单只能有一个用户,但是如果是反过来,使用用户联合订单表来查询,那么就是一对多的关系,一个用户可以有0和无穷多个订单
这里可以使用list做属性
2. 一对多的多表联合查询
案例:用户表和角色表的关系就是多对多的关系
一个用户可以用多个角色, 一个角色有多个用户
应用场景:查询用户的同时查询出该用户的所有角色
多表连接的sql语法
很明显, 这里的语句是使用的内连接,并且使用中间表来表达多对多的关系,只有在中间表中有数据的用户数据和角色数据会被查询出来。
mybatis学习五-mybatis的多表联合查询相关推荐
- MyBatis复习(五):获取多表关联查询结果
Map保存查询结果 <select id="selectBlogMap" resultType="java.util.Map">select b.* ...
- MyBatis框架 多表联合查询实现
三种方式: ①业务装配 对两个表编写单表查询语句,在业务层(Serivce)把查询的两个结果进行关联 ②使用Auto Mapping特性 在实现两表联合查询时通过别名完成映射,使用Maybatis的& ...
- 一个mybatis动态 SQL查询的完整小案例。包含多表联合查询。
多表联合查询 一个根据机场查询航线的例子.有两张表,机场表包含机场信息:机场id.机场名字.机场城市. 航班包含航线信息:航班id.飞机编号.飞行时间.票价.起飞机场id.降落机场id. 需要查询的结 ...
- springboot+mybatis+mysql 多表联合查询
###springboot+mybatis+mysql 多表查询 这里有两张表 用户表和用户信息表user.info 两个实体类展示他们一对一的关系 通过springboot注解的方式实现多表联合查询 ...
- SpringBoot+MyBatis多表联合查询
SpringBoot+MyBatis多表联合查询 写在前面 联合查询在实际工作中用的并不多,因为很多表的数据比较大,或者说未来比较大的表,都要谨慎使用联合查询 数据准备 建表语句 create tab ...
- MyBatis 多表联合查询及优化
关于优化 对于优化嘛,我这里简单的提几点,大家可以考虑一下.首先,就是对表的设计,在设计表初期,不仅仅要考虑到数据库的规范性,还好考虑到所谓的业务,以及对性能的影响,比如,如果从规范性角度考虑的话,可 ...
- SQL语法(五) 多表联合查询
前言 当需要获取的数据分布在多张中,考虑使用联合查询,本章将学习两种查询方式(sql92/sql99) 范例 1.笛卡儿积 将多个表的数据进行一一对应,所得到结果为多表的笛卡尔积.结果的数量为所有表的 ...
- MySQL学习笔记-03高级查询、多表联合查询、聚合函数、子查询、视图、存储过程、权限、
关于作者 金山老师:从事Java.大数据.Python职业化培训6年,项目管理.软件开发14年.欢迎添加我的微信号[jshand],最近建了一些微信交流群,扫描下方二维码添加公众号,回复:进群 文章目 ...
- Mybatis---多表联合查询(1)
Mybatis---多表联合查询(1) 前言 测试准备 一.一对一 新建方法 添加关联 测试 二.一对多 新建实体类 添加方法 添加关联 测试 前言 在开发过程中单表查询不能满足项目需求分析功能,对于 ...
最新文章
- 201771010126 王燕《面向对象程序设计(Java)》第十四周学习总结(测试程序11)...
- AngularJS的学习笔记(一)
- 来自.NET FM的感谢信
- Spring——bean生命周期
- 必知必会JVM垃圾回收——对象搜索算法与回收算法
- python pygame鼠标点击_pygame系列_mouse鼠标事件
- 人生是什么?——感悟1:勇于承担自己的选择才是真正的勇气
- SPSS分析基础——T检验
- servlet容器,web容器,spring容器,springmvc容器,dubbo容器之间区别
- 内存卡Android怎么删除,安卓手机怎么清理内置存储卡垃圾文件
- 居间服务费用合理节税,如何进行税收筹划?
- Thinkphp6调用企业微信官方php版本接口方法
- win7 修复计算机步骤,解答win7系统桌面上的计算机不见了的修复步骤
- c语言软件开发心得:
- 霍尼236主机说明书_霍尼韦尔plus-236报警主机
- 认识USB-TYPEA/B/C/micro/mini
- python爬取网页教程(一个小案例分享)
- 全国计算机c++考试,2018年全国计算机二级C++考试考什么内容
- h3c查在线计算机,H3C 交换机查看所有端口状态的命令
- 反应性磷脂PEG试剂DSPE-PEG-amine|CAS:474922-26-4|DSPE-PEG-NH2
热门文章
- 免费的午餐-天猫农场种树得免费水果体验
- 硬件大熊原创合集(2022/05更新)
- jQuery实现滚动条一直处于最底部
- PCI Express 基础规范修订版6.0【编辑中】
- 前端网页三剑客------JavaScript基础
- HTTP/3发布了,我们来谈谈HTTP/3
- bilibiliC++38-44_STL常用容器_deque容器
- “特步男相亲被拒”之后:国货岂能被diss!
- 四年级计算机课程表制作教案,人教版(2015)信息技术四年级下册 9.个性表格巧制作 教案...
- 精武风云java_《精武风云》最后一局不精彩