映射关系(1-1 1-n n-n)

简介: 本文介绍了MyBatis中四种核心映射关系:一对一、一对多、多对一、多对多。通过resultMap实现属性与字段的映射,解决命名不一致问题;利用`<collection>`处理集合关联,`<association>`处理单对象引用,结合实际代码示例展示如何配置XML映射规则,实现复杂数据结构的精准封装与查询。

1 一对一

定义一个一对一的Result,进行属性-字段之间的一对一关联映射即可,如果属性和字段是一致的,resultType实际也是可以的,resultMap更多是解决字段-属性不一致(满足驼峰命名就是一致),如id(属性)-USER_ID(字段)

2 一对多

设:一个用户对应多个角色

  • User类中添加List<Role>
  • 一的mapper.xml中,resultMap添加<collection>标签.

如:

<resultMap id="userMap" type="User">
  <id property="id" column="id"></id>
  <result property="username" column="username"></result>
  <result property="password" column="password"></result>
  <result property="address" column="address"></result>
  <result property="email" column="email"></result>
  
  <collection property="roles" ofType="Role">
    <id property="id" column="role_id"></id>
    <result property="name" column="role_name"></result>
  </collection>
</resultMap>

会得到类似这样的数据

{
    "id": "1003",
    "username": "小波",
    "password": "123456",
    "address": "北京市东城区",
    "email": "510273027@qq.com",
    "roles": [
        {
            "id": "1",
            "name": "开发"
        },
        {
            "id": "2",
            "name": "TL"
        }
    ]
}

3 多对一

设:一个作者可以有多个博客

  • Author类中添加Blog
  • 一的mapper.xml中添加<association>

如:

<resultMap id="blogResult" type="Blog">
  <id property="id" column="blog_id" />
  <result property="title" column="blog_title"/>
  <association property="author" column="blog_author_id" javaType="Author" resultMap="authorResult"/>
</resultMap>
<resultMap id="authorResult" type="Author">
  <id property="id" column="author_id"/>
  <result property="username" column="author_username"/>
</resultMap>

或:

<resultMap id="productBean" type="Blog">
  <id property="id" column="blog_id" />
  <result property="title" column="blog_title"/>
  <!-- 多对一 -->
  <!-- property: 指的是属性名称, javaType:指的是属性的类型 -->
  <association property="category" javaType="Author">
    <id column="cid" property="author_id"/>
    <result column="username" property="username"/>
  </association>
</resultMap>

4 多对多

设:多个部门对应多个用户

  • 定义一个第三方类,假设为UserForDept.java,属性private User user; private Dept dept;
  • User类中添加Set<Dept>(针对不同场合这里也可以List),mapper.xml中添加<collection>添加UsersForDept
  • Dept类中添加Set<User>(针对不同场合这里也可以List),mapper.xml中添加<collection>添加UsersForDept
相关文章
|
消息中间件 Java 开发者
【颠覆想象】Spring Boot重构未来:解耦与隔离,打造坚不可摧的微服务帝国!
【8月更文挑战第29天】本文通过构建电子商务平台的具体案例,深入探讨了如何利用 Spring Boot 实现服务间的解耦与隔离。文章详细介绍了依赖注入、模块化设计及异步通信等关键技术,并提供了具体代码示例。通过依赖注入,对象间耦合得以降低;模块化设计使各功能域独立,降低系统复杂度;异步通信则利用消息队列提升系统吞吐量与响应速度。这些方法不仅优化了系统架构,还加快了开发进程。
460 0
|
11月前
|
机器学习/深度学习 自然语言处理 BI
阿里云开发者必备:GPT 从核心原理到企业级部署的全流程指南
GPT基于Transformer解码器架构,通过BPE分词、遮蔽自注意力与堆叠解码器实现自回归生成。结合指令微调与领域适配,已在汽车BI、开发者工具等场景落地。阿里云提供从模型训练到轻量化部署的全链路支持,推动GPT在产业智能化中的深度融合与应用创新。(238字)
1155 2
|
10月前
|
存储 缓存 自然语言处理
64_模型部署:推理优化策略
随着人工智能技术的飞速发展,大型语言模型(LLM)在自然语言处理、多模态理解等领域展现出惊人的能力。然而,将这些模型从实验室环境部署到实际生产系统中,面临着诸多挑战。根据2025年最新研究数据,大模型部署的主要挑战包括:
1321 0
|
边缘计算 运维 5G
5G承载网是5G无线接入网与核心网之间的通信管道,负责高效传输数据,保障高速率、低时延和高可靠性
5G承载网是5G无线接入网与核心网之间的通信管道,负责高效传输数据,保障高速率、低时延和高可靠性。关键技术包括灵活以太网、网络切片、光传输和智能管控,支持多样化业务需求。未来将更加智能化、融合化和绿色节能,推动5G网络的快速发展。
1285 4
|
JavaScript 前端开发 程序员
甚至用不了五分钟就能学会vscode插件开发
本文介绍了VSCode插件的开发流程,从创建项目到最终发布。首先通过安装`yo`和`generator-code`脚手架工具初始化项目,选择JavaScript语言配置基础信息。接着,在`extension.js`中实现业务逻辑,例如将中文“变量”替换为“var”。通过F5进入调试模式验证功能。完成后使用`vsce`工具进行打包,解决可能遇到的版本不兼容或README文档问题。最后生成`.vsix`文件,可通过VSCode的“从VSIX安装”加载插件,实现开发闭环。进一步可将插件发布至官方市场供更多开发者使用。
|
Python
python简单分割文件的方法(python经典案例)
这篇文章介绍了两种使用Python进行文件分割的方法:通过读取指定字节数分割大文件成小文件,以及通过行数将文本文件分割成多个小文件。
1114 1
|
Python
灵码回复消息的字体太小,并在pycharm中没法设置.Baidu Comate就可以直接插件中设置了
在使用灵码回复消息时,字体过小且在PyCharm中无法调整。而Baidu Comate插件则可以在插件设置中直接修改字体大小,提供更好的阅读体验。
1052 78
|
自然语言处理 数据挖掘 API
GraphRAG揭秘:构建层次化知识图谱的终极指南
GraphRAG揭秘:构建层次化知识图谱的终极指南
1833 0
|
机器学习/深度学习 算法 计算机视觉
【YOLOv8改进】CPCA(Channel prior convolutional attention)中的通道注意力,增强特征表征能力 (论文笔记+引入代码)
该专栏聚焦YOLO目标检测的创新改进与实战,介绍了一种针对医学图像分割的通道优先卷积注意力(CPCA)方法。CPCA结合通道和空间注意力,通过多尺度深度卷积提升性能。提出的CPCANet网络在有限计算资源下,于多个数据集上展现优越分割效果。代码已开源。了解更多详情,请访问提供的专栏链接。
|
消息中间件 Java Kafka
Windows 10 也能安装Kafka?这篇教程让你轻松掌握!
Windows 10 也能安装Kafka?这篇教程让你轻松掌握!
1711 1
Windows 10 也能安装Kafka?这篇教程让你轻松掌握!