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

简介: 本文介绍了MyBatis中四种核心映射关系:一对一、一对多、多对一、多对多。通过resultMap实现属性与字段的映射,解决命名不一致问题;利用`<association>`处理多对一,`<collection>`处理一对多及多对多关联,结合实例展示嵌套映射与集合封装,适用于复杂业务场景的数据绑定。

image.png
image.png
1 一对一
定义一个一对一的Result,进行属性-字段之间的一对一关联映射即可,如果属性和字段是一致的,resultType实际也是可以的,resultMap更多是解决字段-属性不一致(满足驼峰命名就是一致),如id(属性)-USER_ID(字段)
2 一对多
设:一个用户对应多个角色
User类中添加List
一的mapper.xml中,resultMap添加标签.
如:
会得到类似这样的数据
JSON
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"id": "1003",
"username": "小波",
"password": "123456",
"address": "北京市东城区",
"email": "510273027@qq.com",
"roles": [
{
"id": "1",
"name": "开发"
},
{
"id": "2",
"name": "TL"
}
]
}
3 多对一
设:一个作者可以有多个博客
Author类中添加Blog
一的mapper.xml中添加
如:
XML
复制代码
1
2
3
4
5
6
7
8
9
10









或:
XML
复制代码
1
2
3
4
5
6
7
8
9
10











4 多对多
设:多个部门对应多个用户
定义一个第三方类,假设为UserForDept.java,属性private User user; private Dept dept;
User类中添加Set(针对不同场合这里也可以List),mapper.xml中添加添加UsersForDept
Dept类中添加Set(针对不同场合这里也可以List),mapper.xml中添加添加UsersForDept

相关文章
|
15小时前
|
存储 缓存 算法
零拷贝
实现文件传输时,传统方式需频繁系统调用与内存拷贝,导致大量上下文切换和性能损耗。零拷贝技术通过减少用户态与内核态切换及内存拷贝次数,显著提升性能。它利用PageCache在内核态直接将文件数据送至网络,适用于小文件高效传输;而大文件场景则推荐异步IO结合直接IO,避免缓存污染,提升并发处理能力。
|
15小时前
|
存储 NoSQL 关系型数据库
1-MongoDB相关概念
MongoDB是一款高性能、无模式的文档型NoSQL数据库,适用于高并发、海量数据、高扩展性场景。广泛应用于社交、游戏、物联网、物流、直播等领域,擅长处理数据量大、读写频繁、事务要求不高的业务。支持BSON格式、丰富查询、索引优化、副本集高可用及分片扩展,是Web2.0与大数据时代的理想选择。
|
16小时前
|
缓存 算法 Java
线程池
本文深入剖析Java线程池实现原理,涵盖ThreadPoolExecutor与ScheduledThreadPoolExecutor的底层机制,详解线程复用、任务队列、拒绝策略及周期调度实现,并结合ThreadLocal与InheritableThreadLocal探讨线程私有变量管理,全面揭示并发编程核心技术。
|
15小时前
|
存储 Java 编译器
Java泛型类型擦除以及类型擦除带来的问题
Java泛型在编译时会进行类型擦除,仅保留原始类型。例如List&lt;String&gt;和List&lt;Integer&gt;在运行时都变为List,泛型信息不复存在。类型检查在编译期完成,反射可绕过限制。泛型方法通过桥接实现多态,静态成员不能使用类的泛型参数,基本类型不可作为泛型参数,instanceof无法用于泛型类型判断。
|
16小时前
|
Java 大数据
ArrayList扩容机制
ArrayList添加元素时,先调用ensureCapacityInternal()确保容量,首次添加时默认扩容至10。每次扩容通过grow()实现,新容量为原容量的1.5倍(old + (old &gt;&gt; 1)),提升性能。当元素数超当前容量时触发扩容,保证动态增长。length是数组属性,length()是字符串方法,size()用于集合。
|
16小时前
|
存储 缓存 安全
One Trick Per Day
初始化Map应避免直接指定大小,建议用Guava的`newHashMapWithExpectedSize`或手动计算容量。禁用Executors创建线程池,易因无界队列或过多线程引发OOM,应显式使用`ThreadPoolExecutor`并设合理参数。`Arrays.asList`返回不可变列表,禁止修改操作。遍历Map优先使用`entrySet`或JDK8的`forEach`提升性能。`SimpleDateFormat`非线程安全,应避免static共享,推荐ThreadLocal或Java 8新时间API。并发更新记录需加锁,推荐乐观锁(version控制)重试机制,冲突率低时更优。
|
16小时前
|
uml C语言
系统时序图
时序图(Sequence Diagram)是UML中描述对象间消息传递时间顺序的交互图,横轴为对象,纵轴为时间。用于展示交互流程、强调时序、体现并发过程。核心元素包括角色、对象、生命线、控制焦点和消息等,广泛应用于系统设计与分析。
|
16小时前
|
SQL 运维 分布式计算
如何做好SQL质量监控
SLS推出用户级SQL质量监控功能,集成于CloudLens for SLS,提供健康分、服务指标、运行明细、SQL Pattern分析及优化建议五大维度,助力用户全面掌握SQL使用情况,提升日志分析效率与治理能力。
|
16小时前
|
运维 安全 Devops
生产环境缺陷管理
针对大型团队Git多分支开发中bug管理复杂、易遗漏等问题,我们基于go-git打造了通用化工具git-poison,实现分布式、自动化bug追溯与发布卡点。通过“投毒-解药-银针”机制,精准阻塞带未修复bug的版本发布,避免因沟通疏漏导致的生产故障,显著降低协同成本,提升发布安全与效率。
|
17小时前
|
Java 测试技术 Linux
生产环境发布管理
本文介绍大型团队如何通过自动化部署平台实现多环境(dev/test/pre/prod)高效发布,涵盖各环境职责、基于Jenkins+K8S的CI/CD流程、分支管理、一键发布与回滚机制,并结合Skywalking实现日志链路追踪,提升发布效率与问题排查速度。