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的多表联合查询相关推荐

  1. MyBatis复习(五):获取多表关联查询结果

    Map保存查询结果 <select id="selectBlogMap" resultType="java.util.Map">select b.* ...

  2. MyBatis框架 多表联合查询实现

    三种方式: ①业务装配 对两个表编写单表查询语句,在业务层(Serivce)把查询的两个结果进行关联 ②使用Auto Mapping特性 在实现两表联合查询时通过别名完成映射,使用Maybatis的& ...

  3. 一个mybatis动态 SQL查询的完整小案例。包含多表联合查询。

    多表联合查询 一个根据机场查询航线的例子.有两张表,机场表包含机场信息:机场id.机场名字.机场城市. 航班包含航线信息:航班id.飞机编号.飞行时间.票价.起飞机场id.降落机场id. 需要查询的结 ...

  4. springboot+mybatis+mysql 多表联合查询

    ###springboot+mybatis+mysql 多表查询 这里有两张表 用户表和用户信息表user.info 两个实体类展示他们一对一的关系 通过springboot注解的方式实现多表联合查询 ...

  5. SpringBoot+MyBatis多表联合查询

    SpringBoot+MyBatis多表联合查询 写在前面 联合查询在实际工作中用的并不多,因为很多表的数据比较大,或者说未来比较大的表,都要谨慎使用联合查询 数据准备 建表语句 create tab ...

  6. MyBatis 多表联合查询及优化

    关于优化 对于优化嘛,我这里简单的提几点,大家可以考虑一下.首先,就是对表的设计,在设计表初期,不仅仅要考虑到数据库的规范性,还好考虑到所谓的业务,以及对性能的影响,比如,如果从规范性角度考虑的话,可 ...

  7. SQL语法(五) 多表联合查询

    前言 当需要获取的数据分布在多张中,考虑使用联合查询,本章将学习两种查询方式(sql92/sql99) 范例 1.笛卡儿积 将多个表的数据进行一一对应,所得到结果为多表的笛卡尔积.结果的数量为所有表的 ...

  8. MySQL学习笔记-03高级查询、多表联合查询、聚合函数、子查询、视图、存储过程、权限、

    关于作者 金山老师:从事Java.大数据.Python职业化培训6年,项目管理.软件开发14年.欢迎添加我的微信号[jshand],最近建了一些微信交流群,扫描下方二维码添加公众号,回复:进群 文章目 ...

  9. Mybatis---多表联合查询(1)

    Mybatis---多表联合查询(1) 前言 测试准备 一.一对一 新建方法 添加关联 测试 二.一对多 新建实体类 添加方法 添加关联 测试 前言 在开发过程中单表查询不能满足项目需求分析功能,对于 ...

最新文章

  1. 201771010126 王燕《面向对象程序设计(Java)》第十四周学习总结(测试程序11)...
  2. AngularJS的学习笔记(一)
  3. 来自.NET FM的感谢信
  4. Spring——bean生命周期
  5. 必知必会JVM垃圾回收——对象搜索算法与回收算法
  6. python pygame鼠标点击_pygame系列_mouse鼠标事件
  7. 人生是什么?——感悟1:勇于承担自己的选择才是真正的勇气
  8. SPSS分析基础——T检验
  9. servlet容器,web容器,spring容器,springmvc容器,dubbo容器之间区别
  10. 内存卡Android怎么删除,安卓手机怎么清理内置存储卡垃圾文件
  11. 居间服务费用合理节税,如何进行税收筹划?
  12. Thinkphp6调用企业微信官方php版本接口方法
  13. win7 修复计算机步骤,解答win7系统桌面上的计算机不见了的修复步骤
  14. c语言软件开发心得:
  15. 霍尼236主机说明书_霍尼韦尔plus-236报警主机
  16. 认识USB-TYPEA/B/C/micro/mini
  17. python爬取网页教程(一个小案例分享)
  18. 全国计算机c++考试,2018年全国计算机二级C++考试考什么内容
  19. h3c查在线计算机,H3C 交换机查看所有端口状态的命令
  20. 反应性磷脂PEG试剂DSPE-PEG-amine|CAS:474922-26-4|DSPE-PEG-NH2

热门文章

  1. 免费的午餐-天猫农场种树得免费水果体验
  2. 硬件大熊原创合集(2022/05更新)
  3. jQuery实现滚动条一直处于最底部
  4. PCI Express 基础规范修订版6.0【编辑中】
  5. 前端网页三剑客------JavaScript基础
  6. HTTP/3发布了,我们来谈谈HTTP/3
  7. bilibiliC++38-44_STL常用容器_deque容器
  8. “特步男相亲被拒”之后:国货岂能被diss!
  9. 四年级计算机课程表制作教案,人教版(2015)信息技术四年级下册 9.个性表格巧制作 教案...
  10. 精武风云java_《精武风云》最后一局不精彩