2.映射关系(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
相关文章
|
4月前
|
安全 Unix API
告别混乱时间处理:Python中time与datetime模块的实用选择
告别混乱时间处理:Python中time与datetime模块的实用选择
384 126
|
5月前
|
存储 缓存 运维
一场FullGC故障排查
本文记录了一次Java应用CPU使用率异常升至104%的排查过程。通过分析发现,问题由Full GC频繁触发导致,根源在于将大体积Excel数据以List&lt;Map&lt;String, String&gt;&gt;形式加载至JVM内存,造成堆内存膨胀且长期驻留,最终引发内存压力和GC风暴。结合JProfiler工具定位到大对象后,提出“治本”(移出JVM内存)与“治标”(精简数据结构)两类解决方案,并总结了从监控识别、工具分析到代码优化的完整排查思路,强调应关注JVM层面而非仅机器指标。
|
5月前
|
运维 Devops 开发工具
生产环境缺陷管理
git-poison基于go-git实现分布式bug追溯,解决多分支开发中bug漏修、漏发等协同难题,自动化卡点发布流程,降低沟通成本,提升发布安全性与效率。
生产环境缺陷管理
|
5月前
|
Java 测试技术 Linux
生产环境发布管理
本文介绍大型团队中基于自动化部署平台(CI/CD)的多环境发布流程,涵盖dev、test、pre、prod各环境职责,以及如何通过Jenkins+K8S实现高效部署与回滚,并结合Skywalking等工具进行日志追踪与问题排查。
生产环境发布管理
|
5月前
|
自然语言处理 fastjson Java
FastJson:大面积故障规避案例
本文记录了一次由Kotlin语法误用引发的FastJson反序列化重大故障排查过程。因将 `{}` 错误赋值给Java对象字段,导致FastJson解析时触发 `kotlin_error` 静态标记位异常,进而引发全局反序列化失败。问题根源隐蔽,影响深远,最终通过深入源码定位并修复。分享多语言混编下的踩坑经验,强调框架不可盲信,代码需严谨对待。(239字)
|
5月前
|
测试技术 UED
发布模式
蓝绿部署通过两套系统(蓝/绿)并行,实现零停机发布与快速回滚;金丝雀发布逐步替换旧版本,降低风险;A/B测试则用于对比多版本效果,优化用户体验。三者适用场景不同,各有侧重。
发布模式
|
5月前
|
Java Shell Apache
Jmeter快速入门
本文介绍了JMeter的安装与快速入门指南。首先需确保已安装JDK并配置环境变量,随后从官网或本地包下载JMeter,解压后通过双击或命令行启动。教程还演示了如何设置中文界面、创建线程组、添加HTTP取样器及监听器,并查看测试结果,帮助用户快速掌握基本使用方法。
Jmeter快速入门
|
5月前
|
安全 Java 数据安全/隐私保护
2.OAuth2.0实战案例
本文介绍基于Spring Boot与Spring Cloud的OAuth2安全认证实现,涵盖父工程搭建、资源服务与授权服务配置,并演示授权码、简化、密码及客户端四种模式的全流程测试,实现安全的分布式系统权限控制。
|
5月前
|
前端开发 安全 Java
1.自定义认证前端页面
本文介绍Spring Security前后端整合实现登录认证的完整流程。包含前端login.html页面引入、后端HelloController接口定义及SecurityConfig安全配置类详解,重点讲解权限控制、表单登录、CSRF关闭等核心配置,并通过启动验证展示访问控制效果,帮助快速掌握基础安全防护机制。(238字)
|
5月前
|
前端开发 程序员
常见注解及使用说明
本文介绍SpringMVC中@RequestMapping注解的作用及原理,讲解如何通过注解将HTTP请求映射到控制器方法,并列举@GetMapping等派生注解,帮助理解前后端接口的对应关系。

热门文章

最新文章