MyBatis如何实现多表查询
目录
写在前面
在数据库中表与表的关系可以分为: 一对一、一对多、多对多、多对一。在Mybatis中,多对一的关系可以看成一对一的关系。

这里我会把一对一和一对多的关系用xml配置方式以及注解方式总结一下如何实现多表查询。
手动处理映射关系(xml配置方式)
数据库表及关系
我们以学校中老师和课程之间的关系为例,一个老师可以教多门课程,一个课程对应的老师是一个。所以老师对课程一对多关系,课程对老师是一对一关系(我的表格关系是这样)。表如下图所示:


一对一查询
一对一查询步骤如图所示: 
首先我们在课程实体类中加入老师成员变量表示一对一映射。

在课程接口中提供查询所有方法findAllCourse(),以便加载时调用。
然后配置课程层的xml文件使用resultMap标签,注意一对一的关系映射使用的是association

最后通过测试类找到与每一个课程相关的授课老师

一对多查询
一对多查询步骤如图所示:

在老师实体类中加入课程集合成员变量,表示一对多映射关系。

在老师接口中提供查询老师教授的所有课程的方法以便加载时调用。

然后再配置老师层的xml文件使用resultMap标签,注意一对多的关系映射使用的是collection

最后通过测试类找到与一个授课老师教授的多个课程

Mybatis注解实现多表查询
基本注解的分类

可以在接口文件中直接利用注解中的增删改查对应关键字语句,简化了配置文件,如下图所示:

注解中的 一对一映射
一对一使用one属性的@One注解
property代表实体类中声明的属性,column代表传入后面select语句中的参数
select代表查询本条数据时所用的方法的全限定名

注解中的 一对多映射
一对多使用many属性的@Many注解

注意:mapper.xml和注解可以共存搭配使用,但xml中的resultMap和注解中的results不能同时附给同一条SQL语句
