多表连接

1. 关系:

表和表之间是有关系,当查询其中一张表时,会需要级联的查询另外一张表。

数据之间的关系也要在实体类中进行体现。实体类中通过定义另外一个类型的属性记录2者之间的关系。

1, 如何在MyBatis中处理多表关系

处理多表关系要满足的三个条件

Table,数据库表, 在数据库的表table之间要建立对应的主外键关系

Entity,实体 ,在实体中要定义另一个实体类的属性

Mapper文件 (解决有关系的表 和 有关系的实体的映射关系)

2.对应关系:

一对一:

1:1 关系双方的数据是一一对应的,

比如说一个人只能有一本护照,一个护照只能从属于一个人

Table:

表之间的关系:通过外键记录表之间的关系

父表:数据先出现。

子表:数据通常后出现。

比如人和护照,先有人再有护照,人就是父表,护照就是子表。

在一对一的对应关系中,外键定义在任何一方均可,不过建议外键定义在字表中

如下图所示:以人(person)表和护照表(passport)所示:

Mybatis的多表连接操作,一对一、一对多、多对多_数据

Entity:实体 ,在实体中要定义另一个实体类的属性

如下图所示:

Mybatis的多表连接操作,一对一、一对多、多对多_一对一_02

Mapper.xml文件

级联查询要用到resultMap封装查询结果。

Mybatis的多表连接操作,一对一、一对多、多对多_一对一_03

如此,这样就完成了一对多的查询。

一对多:

1:n 关系双方的数据,其中一方的一个数据要对应另外一方的多个数据,

比如说 一个用户多个订单。

Table:

一对多表间的关系,外键的位置只能在字表里,也就是只能在“多”的一方

以订单表和账户表为例:

Mybatis的多表连接操作,一对一、一对多、多对多_多对多_04

Entity,实体间的关系,
“一”的实体属性里面定义多的属性要用List集合

如图所示:

Mybatis的多表连接操作,一对一、一对多、多对多_多对多_05Mapper文件

xml文件的SQL语句如下图所示:

Mybatis的多表连接操作,一对一、一对多、多对多_多对多_06

多对多:

n:n 关系双方的数据,其中一方的一个数据可以对应另外一方的多个数据

另外一方的一个数据反之也可以对应本方的多个数据

比如说 一个学生可以选多门课 一门课也可以被多个人同时选择。

Table:

多对多表的关系不在任一一张表中记录外键,

要通过第3张表来记录两张表的连接关系。

如下图所示:

以学生表和选课表为例:

Mybatis的多表连接操作,一对一、一对多、多对多_多对多_07

Entity,实体,

在这两个表的实体属性中都要使用List集合来定义属性

如下图给所示:

Mybatis的多表连接操作,一对一、一对多、多对多_一对一_08

Mapper文件

SQL语句写法如下:

Mybatis的多表连接操作,一对一、一对多、多对多_多对多_09

总结:级联查询时,如果本类中有其它类型的属性,在本类DAO的mapper文件中resultMap里使用association
级联查询时,如果本类中有List集合属性,在本类DAO的mapper文件中resultMap里使用collection