MyBatis学习之一----多表查询

1、mybatis实际上并不是pojo和数据库的字段的对应,而是pojo和sql语句的对应。

  两个表通过相同的主键来查询

(1)内连接查询

  select * from tb_order o,tb_user u where o.user_id = u.id;

 查询tb_order和tb_user两个表中id相等的信息。

(2)外链接查询

  select * from tb_order o LEFT JOIN tb_user u ON o.user_id = u.id

与(1)结果相同。以外链接为主,以订单为主不管是否对应客户,都要把订单查询出来。

那么如何将两个表中查询的结果封装到一个对象中呢?既包含订单信息也包含用户信息。

  第一种解决方案:新建一个类,包含订单和用户信息。将查询结果集和对象对应上。

  

扩展Order对象,来映射结果集。

  

面向对象的思想解决方式:

  在Order对象中添加User对象

  在Order类中,添加private User user;并添加getter和setter方法。

  但是mapper用原来的sql并不能封装进来,无法完成自动映射。那么如何解决呢?

  使用resultMap

  association完成对象中 的某个对象的映射

  

原文地址:https://www.cnblogs.com/xiaotieblog/p/8343020.html

时间: 2024-10-11 19:12:55

MyBatis学习之一----多表查询的相关文章

MyBatis:学习笔记(3)——关联查询

MyBatis:学习笔记(3)--关联查询 关联查询 理解联结 SQL最强大的功能之一在于我们可以在数据查询的执行中可以使用联结,来将多个表中的数据作为整体进行筛选. 模拟一个简单的在线商品购物系统,如果我们将用户信息和订单信息都保存在user表中,这样就不存在联结关系,因为我们仅仅操作一张表就好. 但是这是非常不明智的选择,举例来说,一个用户可以拥有多个订单,如果保存在一个表中,势必会导致用户信息的多次出现,因为每个订单绑定的用户信息都是相同的. 所以我们尽量要将不同的信息存储与不同的表中,但

mybatis学习笔记(10)-一对一查询

mybatis学习笔记(10)-一对一查询 mybatis学习笔记10-一对一查询 resultType实现 resultMap实现 resultType和resultMap实现一对一查询小结 本文使用两种方式(resultType和resultMap)实现一对一查询,查询订单信息,关联查询创建订单的用户信息 resultType实现 sql语句 确定查询的主表:订单表 确定查询的关联表:用户表 关联查询使用内连接?还是外连接? 因为orders表中有一个外键(user_id),通过外键关联查询

oracle学习之多表查询,子查询以及事务处理

多表查询的基础是采用笛卡尔集: 最终的行数 = 表1的行数 * 表2的行数 最终的列数 = 表1的列数 + 表2的列数 过滤笛卡尔集的关键是写连接条件,N张表至少需要N-1个条件. 多表查询例子1,等值与不等值连接,查询员工信息,员工号,姓名,月薪 和部门名称 注意,有歧义的字段必须指定是哪个表,否则将会报错. 当等值连接不成立的时候,想要保留一边的数据,这时需要使用外连接技术! 左外连接的写法,即想保留等号左边的数据,那么在等号右侧添加(+) 自连接,比如查询员工信息,显示为:xxx's bo

MySQL学习9 - 单表查询

一.单表查询的语法 二.关键字的执行优先级(重点) 三.单表查询示例 1.where约束 2.group by分组查询 3.聚合函数 4.HAVING过滤 5.order by查询排序 6.limit 限制查询的记录数 一.单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制条数 二.关键字的执行优先级(重点) 重点中的重点:关键字的执行优先级 from where

Mybatis学习记录(四)--高级查询和缓存

这些都是连贯的学习笔记,所以有的地方因为之前都说过,所以也就没怎么写详细了,看不太明白的可以看看之前的笔记. 一.高级查询 高级查询主要是一对一查询,一对多查询,多对多查询 1.一对一查询 有用户和订单两个表,用户对订单是1对1查询.也就是订单中有一个外键是指向用户的. 先创建实体类: User.java public class User { private int id; private String username; private String password; private St

MyBatis学习19-一对多查询

需求:查询订单及订单明细的信息 1.写sql语句 确定主查询表:订单表 确定关联查询表:订单明细表 在一对一的基础之上,添加订单明细表关联即可,同时,对orders映射不能出现重复记录 select orders.*, user.username, user.sex, user.address, orderdetail.items_id, orderdetail.items_num, orderdetail.orders_id from orders, user, orderdetail whe

mysq 学习四 多表查询

多表的查询 1.连接查询 a.交叉连接:(cross in) create table CUSTOMERS( id int(11) NOT null auto_increment, name varchar(100) default null, city varchar(20) default null, primary key (id) ); 在插入数据的时候如果出现了中文插不进去的时候,保错的提示信息 是varchar的长度不够的时候,但是我们又明显知道我们指定的 长度是够的时候 我们可以看

MyBatis学习20-多对多查询

1.需求:查询用户及用户购买的商品信息 查询主表是:用户表 关联表:由于用户和商品没有直接关联,通过订单和订单明细进行关联,所以关联表:orders.orderdetail.items SELECT orders.*, USER.username, USER.sex, USER.address, orderdetail.id orderdetail_id, orderdetail.items_id, orderdetail.items_num, orderdetail.orders_id, it

mybatis一对多联表查询的两种常见方式

1.嵌套结果查询(部分代码如下) sql语句接上: 注释:class表(c别名),student表teacher(t别名)teacher_id为class表的字段t_id为teacher表的字段,因为两者有主键关联的原因,c_id为class表的字段.根据c_id查询._classes为classes实体类(既是表class对应的实体类)前两个property为class表对应实体类的属性,column对应class表的字段,association中teacher为classes实体类属性,co