映射关系(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
相关文章
|
14小时前
|
SQL 运维 分布式计算
如何做好SQL质量监控
本文介绍如何通过CloudLens for SLS实现SQL质量监控,帮助用户全面掌握SQL使用情况。涵盖健康分、服务指标、运行明细、SQL Pattern分析及优化建议五大维度,助力识别性能瓶颈、优化资源使用,提升日志分析效率与治理能力。
 如何做好SQL质量监控
|
11小时前
|
SQL 数据库连接 数据库
Activity代码实现
本教程演示如何使用Activiti创建、部署并操作简单工作流。包括流程定义、启动实例、任务查询与完成,结合代码与数据库验证,实现审批流程自动化管理。
Activity代码实现
|
14小时前
|
运维 Devops 开发工具
生产环境缺陷管理
git-poison是一款基于go-git的生产环境缺陷管理工具,实现bug的分布式追溯与自动化卡点,有效避免多分支开发中的漏修、漏发问题,降低协同成本,提升发布安全性。
生产环境缺陷管理
|
14小时前
|
Java 测试技术 Linux
生产环境发布管理
本文介绍大型团队如何通过自动化部署平台实现多环境(dev/test/pre/prod)高效发布,涵盖各环境职责、基于Jenkins+K8S的CI/CD流程、分支管理与日志排查方案,提升发布效率与系统稳定性。
 生产环境发布管理
|
11小时前
|
Web App开发 Dubbo 关系型数据库
Soul网关接入与验证
本章节在前两章基础上集成Soul网关,讲解Provider与Consumer应用如何通过添加依赖、注解及配置文件接入Soul,实现服务注册与网关路由,并通过实际请求验证网关调用流程。
Soul网关接入与验证
|
11小时前
|
Dubbo Java 应用服务中间件
搭建dubbo-zk应用
基于Spring Boot 2.2.2与Dubbo 2.0.0,构建ZooKeeper注册的分布式服务架构,实现Provider与Consumer模块间高效RPC通信,含完整POM配置及启动验证流程。
搭建dubbo-zk应用
|
11小时前
|
Dubbo Java 应用服务中间件
入门运行Soul
Soul 是基于 WebFlux 构建的响应式 API 网关,支持高性能、异步处理与多协议集成,如 Dubbo、Spring Cloud。具备插件化架构、动态配置、流量控制、热插拔等特性,兼容多种语言,支持集群部署与 A/B 测试,网关延迟低至 1~2ms。
|
11小时前
|
Arthas 存储 运维
记Arthas实现一次CPU排查与代码热更新
本文介绍如何使用Arthas排查Java应用CPU占用过高问题,通过thread、watch、jad等指令定位线程阻塞与异常代码,并实现无需重启的热更新修复,结合profile生成火焰图进行性能分析,提升线上问题处理效率。
记Arthas实现一次CPU排查与代码热更新
|
11小时前
|
监控 Java Spring
.jvm相关
本系统提供实时数据监控与JVM诊断功能,涵盖线程、内存、系统属性、环境变量、日志级别及堆栈信息的查看与修改,支持动态调整JVM参数并分析性能计数器,助力Java应用调试与优化。
.jvm相关
|
11小时前
|
Arthas Java 测试技术
基础指令
Arthas 是一款Java诊断工具,支持查看线程信息(dashboard、thread)、反编译类(jad)、观测方法调用(watch)等。可通过命令查看最忙线程、阻塞线程、指定状态线程及方法入参出参,支持采样间隔设置,帮助快速定位性能问题。
基础指令

热门文章

最新文章