Java MyBatis 多表查询实战:一对一与一对多映射详解

阿橙
阿橙
发布时间:2026-10-16| 5人浏览过
原创

本文详细讲解MyBatis在多表查询场景下的核心配置方法。通过Student与Banji(班级)的关联案例,演示如何利用association标签处理一对一关系,并简述一对多结构的实现逻辑,附带完整SQL语句、Mapper代码片段及运行结果验证。

准备数据表结构

在开始代码开发前需明确数据库表之间的关联关系。以常见的教务系统为例,主要涉及四张表:

  • 学生表 (student)
  • 班级表 (banji)
  • 课程表 (course)
  • 班级课程表 (banji_course)

一对一关联查询:association

在一对一关系中,例如“一个学生只属于一个班级”,我们需要将班级的信息映射到学生对象的属性中。这需要编写联合查询SQL,并在MyBatis映射文件中配置association标签。

第一步:编写联合查询SQL

为了获取学生及其所属班级的详细信息,使用INNER JOIN连接student表和banji表。注意字段别名设置,避免ID冲突。

-- 基础SQL示例
SELECT 
  s.id,
  s.`name`,
  s.age,
  s.gender,
  b.id AS banjiId,
  b.name AS banjiName
FROM student AS s 
INNER JOIN banji AS b
ON s.banji_id = b.id;

第二步:配置Mapper XML映射

在ResultMap中使用association标签来描述嵌套对象映射。该标签主要包含以下关键属性:

  • property:目标对象(如Student)中用于承载关联数据的属性名(如banji)。
  • javaType:关联对象的全限定类名(如com.xxx.Banji)。
  • column:数据库中用于关联的字段名或别名(如banji_id)。

配合resultMap定义,可以将SQL查询结果自动封装为带有班级信息的Student对象列表。

第三步:执行测试与验证

通过MyBatis工具类获取SqlSession,调用对应的selectList方法执行查询。以下是典型的测试代码结构与控制台输出结果:

public void testOne2One() {
    SqlSession sqlSession = MyBatisUtil.getSqlSession();
    // 查询携带班级信息的学生列表
    List<Student> list = sqlSession.selectList("student.findStudentBanjiInfo");
    
    for (Student student : list) {
        System.out.println(student);
    }
}

控制台输出示例显示,每个Student对象内部都正确包含了Banji对象的数据:

Student [id=1, name=张三, age=21, gender=男, banji=Banji [id=1, name=java1807] ]
Student [id=2, name=zhangsan, age=12, gender=男, banji=Banji [id=1, name=java1807] ]
Student [id=4, name=王五2, age=12, gender=男, banji=Banji [id=2, name=java1812]]

在后续的前端展示或业务逻辑中,可通过${student.banji.id}或${student.banji.name}直接访问嵌套属性。

一对多关联查询:collection

一对多关系通常表现为“一个班级包含多名学生”。在MyBatis中,除了association外,还需使用collection标签来处理集合类型的关联数据。

 

多对多关系处理

在实际数据库设计中,多对多关系(如学生与课程)通常不直接建立关联表映射,而是分解为两个一对多关系进行处理。即:一个学生对应多个选修记录,一个课程对应多个选修记录。

总结

MyBatis通过association和collection标签优雅地解决了多表查询中的数据组装问题。掌握这两种映射方式,能够有效简化Java后端在复杂业务场景下的SQL拼接与对象映射工作量。以上就是Java MyBatis 多表查询详解的详细内容,更多关于MyBatis高级特性与Java ORM开发的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。