当前位置: 首页 > news >正文

MyBatis 一对多关联映射在Spring Boot中的XML配置

在Spring Boot中使用MyBatis实现一对多关系时,可以通过XML映射文件来配置。下面我将详细介绍几种实现方式。

基本概念

一对多关系指的是一个实体对象包含多个子对象集合的情况,例如:

  • 一个部门有多个员工
  • 一个订单有多个订单项
  • 一个博客有多个评论

实现方式

1. 使用嵌套结果映射(ResultMap)

<!-- DepartmentMapper.xml -->
<resultMap id="departmentWithEmployeesMap" type="com.example.Department"><id property="id" column="dept_id"/><result property="name" column="dept_name"/><!-- 一对多关系配置 --><collection property="employees" ofType="com.example.Employee"><id property="id" column="emp_id"/><result property="name" column="emp_name"/><result property="email" column="emp_email"/></collection>
</resultMap><select id="findDepartmentWithEmployees" resultMap="departmentWithEmployeesMap">SELECT d.id as dept_id,d.name as dept_name,e.id as emp_id,e.name as emp_name,e.email as emp_emailFROM department dLEFT JOIN employee e ON d.id = e.dept_idWHERE d.id = #{id}
</select>

2. 使用嵌套查询(Nested Query)

<!-- DepartmentMapper.xml -->
<resultMap id="departmentMap" type="com.example.Department"><id property="id" column="id"/><result property="name" column="name"/><collection property="employees" column="id" ofType="com.example.Employee"select="com.example.mapper.EmployeeMapper.findByDepartmentId"/>
</resultMap><select id="findById" resultMap="departmentMap">SELECT id, name FROM department WHERE id = #{id}
</select><!-- EmployeeMapper.xml -->
<select id="findByDepartmentId" resultType="com.example.Employee">SELECT id, name, email FROM employee WHERE dept_id = #{deptId}
</select>

实体类示例

// Department.java
public class Department {private Long id;private String name;private List<Employee> employees;// getters and setters
}// Employee.java
public class Employee {private Long id;private String name;private String email;// getters and setters
}

使用注解的替代方案

如果你更喜欢使用注解而不是XML,也可以这样配置:

@Mapper
public interface DepartmentMapper {@Select("SELECT id, name FROM department WHERE id = #{id}")@Results({@Result(property = "id", column = "id"),@Result(property = "name", column = "name"),@Result(property = "employees", column = "id",many = @Many(select = "com.example.mapper.EmployeeMapper.findByDepartmentId"))})Department findByIdWithEmployees(Long id);
}

性能考虑

  1. 嵌套结果映射:单次SQL查询,适合关联数据量不大的情况
  2. 嵌套查询:多次SQL查询,适合关联数据量大或需要延迟加载的情况

可以通过 fetchType 属性控制加载方式:

<collection property="employees" column="id" ofType="com.example.Employee"select="com.example.mapper.EmployeeMapper.findByDepartmentId"fetchType="lazy"/>  <!-- 或 eager -->

以上就是在Spring Boot中MyBatis实现一对多关系的XML配置方式。根据你的具体需求选择合适的方法。

http://www.xdnf.cn/news/411859.html

相关文章:

  • 北京市通州区经信局对新增通过国家级生成式人工智能及深度合成算法备案企业给予100w、20w一次性补贴
  • 【软考-软件设计师学习总结】- 计算机网络概述
  • MINIX 1.0 文件系统的实现(C/C++实现)
  • Lynx-字节跳动跨平台框架多端兼容Android, iOS, Web 原生渲染
  • Vue学习百日计划-Deepseek版
  • 残差网络(ResNet)
  • c/c++爬虫总结
  • docker使用过程中遇到概念问题
  • 线程的让位(Yield)
  • 修改linux同步时间
  • 潘大水库介绍
  • object的常用方法
  • MAC-OS X 命令行设置IP、掩码、网关、DNS服务器地址
  • 5月12日信息差
  • 为什么 cout<<“中文你好“ 能正常输出中文
  • Django 项目的 models 目录中,__init__.py 文件的作用
  • [ linux-系统 ] 自动化构建工具makefile
  • Python实例题:pygame开发打飞机游戏
  • 防爆手机与普通手机有什么区别
  • WHAT - 《成为技术领导者》思考题(第六章)
  • 大模型的Lora如何训练?
  • PH热榜 | 2025-05-12
  • 5月12日星期一今日早报简报微语报早读
  • 养生:通往健康生活的桥梁
  • 迁移 Visual Studio Code 设置和扩展到 VSCodium
  • 多模态大语言模型arxiv论文略读(七十)
  • 背单词软件开发英语App提分宝系统源码,河南数匠软件开发
  • 深入解析MySQL联合查询(UNION):案例与实战技巧
  • MySQL全量、增量与恢复
  • 如何有效追踪需求的实现情况