Java学习笔记--多表查询项目开发步骤
作者:zinghoWU
时间:2026-01-28 21:08:11 星期三
知识点
MyBatis 多表映射标签
- association (多对一,一对一):用于"员工--部门"的映射
- collection(一对多):用于"部门--员工"的映射
多表映射的 2 种方式
- 方式一:嵌套结果 -- 联表(引用外部ResultMap)
逻辑:通过LEFT JOIN一次查询出多表数据,复用外部 Mapper 的 ResultMap
优点:效率高,仅执行一次SQL - 方式 二:嵌套查询(子查询)
逻辑:先查主表(本项目中是员工表),再通过select调用其他Mapper的方法(本项目中selectById()方法)查询关联表(部门),用column关联字段
优点:灵活,数据量少时推荐
左查询
select 字段 from 主表名 left jion 从表 on 条件
主表全部显示,从表若没有数据显示null
步骤 1:搭建项目环境(Maven + 依赖)

步骤 2:配置 pom.xml,工具类(util)和MyBatis 核心文件
pom.xml 配置项目所需信息.比如Juit,slf4j等,配置之后就不用导jar包了
db.properties 配置数据库 URL、用户名、密码
log4j.properties 日志
mybatis-config.xml Mapper映射相关配置文件
util 工具类直接拷贝,里面封装了获取 SqlSessionFactory 对象打开一个SqlSession对象的方法和一个包含了commit()和close()的方法
步骤3:编写接口和实现类框架
在mapper包下创建impl子包,用于存储对应Mapper接口的实现类
接口以XXXMapper方式命名,注意写完不要漏了 实现接口的语句(图中 implements EmpMapper)

步骤 4:编写实体类(Dept和Emp)
部门类

部门-->员工 是一对多关系,所以要在一个类Emp中包含关联属性 List
员工类

同理,员工-->部门 是多对一关系,所以要在部门类Dept中包含关联属性 Dept dept
步骤 5:编写 Test测试类,接口和实现类中的具体方法(通过Alt + Enter快捷键)

通过 Alt + Enter快捷键 在Mapper层创建对应的方法,再分别跳转到对应的实现类实现方法,这里以Emp的findAll()方法为例,如图:


步骤6:编写Mapper XML 映射文件(多表查询核心)
回到mapper层,再次使用Alt + Enter快捷键进行跳转
DeptMapper.xml

EmpMapper.xml

Emp-->Dept 关系多对一,resultMap用association

查询用的是子查询,先查自己(emp表)

将结果放在结果集empMap中
再查询dept表,通过调用DeptMapper中的selectById()方法,将结构放在结果集empDeptMap中

最后将这两个结果集进行拼接输出
Dept --> Emp 一对多,resultMap用用collection

查询用的是外连接 先将dept表数据查询放入结果集deptEmpMap中,然后在结果集中引用EmpMapper的empMap结果集,最后输出


浙公网安备 33010602011771号