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

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

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 数据库
28个案例问题分析---20---内存长期占用导致系统慢--jvm调优
28个案例问题分析---20---内存长期占用导致系统慢--jvm调优
727 0
|
5月前
|
存储 算法 BI
xxljob本地运行
本文介绍XXL-JOB分布式任务调度框架的本地部署与使用流程,涵盖源码获取、服务端数据库初始化、配置修改、服务启动及客户端注册执行器等步骤,并演示如何配置调度任务、选择路由策略及测试执行效果,帮助快速上手使用。
 xxljob本地运行
|
5月前
|
Java 数据库连接 调度
xxljob执行源码分析
本文深入解析XXL-JOB分布式任务调度框架源码,涵盖架构设计、核心执行流程与关键线程池机制。内容包括任务触发、注册、失败重试、日志报告及时间轮调度原理,结合带中文注释的源码包与分析导图,全面剖析其高性能设计实现。
 xxljob执行源码分析
|
存储 机器学习/深度学习 监控
如何监控员工的电脑——基于滑动时间窗口的Java事件聚合算法实现探析​
在企业管理场景中,如何监控员工的电脑操作行为是一个涉及效率与合规性的重要课题。传统方法依赖日志采集或屏幕截图,但数据量庞大且实时性不足。本文提出一种基于滑动时间窗口的事件聚合算法,通过Java语言实现高效、低资源占用的监控逻辑,为如何监控员工的电脑提供一种轻量化解决方案。
464 3
|
存储 安全 数据安全/隐私保护
构建安全Flutter应用 - 6个实用技巧
随着越来越多的敏感用户数据在Flutter应用中流通,应用安全已成为首要关注点。本文为您总结6大关键Flutter应用安全最佳实践,帮助开发者筑牢应用安全防线,保护用户隐私。
665 1
构建安全Flutter应用 - 6个实用技巧
|
SQL Java 数据库
【面经】亚信科技面试问题合集
【面经】亚信科技面试问题合集
460 3
|
C++
C++ 类的访问修饰符:深入解析
C++ 类的访问修饰符:深入解析
537 1
|
人工智能 编解码 自然语言处理
通义万相功能使用实战
【7月更文第2天】阿里云的通义万相是款AI绘画工具,让用户通过文本描述创建个性化头像。首先,注册阿里云账号并登录平台。明确头像风格、特征和背景,然后在平台上选择“文本生成图像”,输入详细描述。设定尺寸后提交生成。系统会提供多个选项,用户可选择、调整或重新生成。满意后下载头像,应用于社交平台。记得提供清晰的描述以获取最佳效果,勇于探索不同的创意组合。通义万相,让AI助你实现艺术想象。
1638 0
|
计算机视觉
图像处理之Gamma校正
图像处理之Gamma校正
535 0
|
数据可视化 算法 Java
生信教程:多序列比对
生信教程:多序列比对

热门文章

最新文章