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

简介: 本文介绍了MyBatis中四种核心映射关系:一对一、一对多、多对一及多对多。通过resultMap实现属性与字段的映射,解决命名不一致问题;使用`<collection>`处理集合关联(如用户-角色),`<association>`处理单对象关联(如博客-作者);多对多则借助中间类实现双向关联映射,提升复杂数据结构的查询效率。

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
相关文章
如何在cmd中打开指定文件夹路径
如何在cmd中打开指定文件夹路径
3899 0
|
7月前
|
运维 监控 Java
线上故障零扩散:全链路监控、智能告警与应急响应 SOP 完整落地指南
本文系统阐述线上服务稳定性保障体系:以全链路监控(指标/链路/日志)为基石,构建五层分层监控;通过智能告警(分级、抑制、聚合、动态阈值)实现精准触达;落地标准化应急SOP(止损优先、分工明确、闭环复盘);最终形成“监控→告警→响应→复盘→优化”持续闭环,推动运维从被动救火转向主动防控。
897 2
|
5月前
|
算法 数据安全/隐私保护 C++
从RPA到智能办公Agent:财务对账场景的能力升级与避坑指南
本文以财务对账真实场景切入,对比RPA与智能Agent的本质差异:RPA仅按死规则执行,快但僵化;智能Agent则具备合并匹配、模糊识别、自学习与差异推断能力,将对账从8小时缩至40分钟。重点揭示升级路径与五大避坑要点,强调“人机协同”而非替代。(239字)
520 0
|
10月前
|
人工智能 小程序 搜索推荐
解析数字人公司如何构建3D、2D、AI数字人交互全栈技术方案?
在AI技术驱动下,虚拟数字人正从形象载体进化为具备交互与执行能力的“业务智能体”,重塑人机服务模式。本文解析2D复刻与3D创造两大技术路径,探讨其在政务、文旅、医疗、教育等场景的落地实践,展现AI数字人如何以全栈技术和多模态交互,成为产业智能化升级的核心工具。
745 1
|
10月前
|
XML Java 数据库连接
Spring Boot集成MyBatis
本文系统讲解Spring Boot集成MyBatis的两种方式:基于XML和注解。涵盖依赖配置、yml设置、驼峰命名映射,并详解@Select、@Insert等注解用法及@Param、@Results问题解决方案,结合实战示例,具有较强实用性,适用于日常开发参考。
|
缓存 Java 索引
2025 年 Java 面试必备最常见 200 + 面试题及答案解析
这是一份针对Java面试的综合技术方案与应用实例文档,涵盖Java基础(JDK/JRE、字符串、IO流)、容器(ArrayList/LinkedList、HashMap)、多线程(线程创建、同步、线程池)、数据库(MySQL索引、Redis缓存穿透)及Spring框架(IOC容器、热部署)等核心模块。通过详细解析常见面试题,帮助读者深入理解并掌握Java核心技术,为应对面试提供全面指导。此外,还涉及反射、设计模式、JVM调优等进阶内容,助力开发者全面提升技能。代码示例可从提供的链接下载。
1655 6
|
安全 Windows
硬盘数据恢复—硬盘坏道的分类以及不同类型硬盘坏道的修复方法
坏道是硬盘最常见的原因之一。导致硬盘坏道的原因很多,除了正常老化,还有其他一些原因。使用过程中频繁整理碎片、不适当的超频、供电质量不好、温度过高、灰尘、震动等都会导致硬盘出现坏道。
1517 0
|
Prometheus Kubernetes 监控
在K8S中,如何进行Kubernetes迁移工作?
在K8S中,如何进行Kubernetes迁移工作?
|
机器学习/深度学习 人工智能 自然语言处理
人工智能在医疗诊断中的最新应用
人工智能在医疗诊断中的最新应用