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

简介: MyBatis中通过resultMap实现关联映射:一对一使用resultMap解决字段与属性名不一致;一对多在“一”方配置<collection>,如用户包含多个角色;多对一通过<association>关联,如博客关联作者;多对多借助中间类,双方均用<collection>维护集合关系。

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

相关文章
|
2天前
|
存储 监控 Java
整合切面,参数拦截+过滤
该类基于Spring AOP实现请求参数日志记录,通过`@Before`、`@Around`和`@After`切面拦截Controller层方法,自动记录请求来源、URL、方式、参数及执行耗时,便于调试与监控,日志通过LogProxy输出,提升系统可观测性。(238字)
|
1天前
|
XML SQL 监控
整合Logback,滚动记录+多文件
`logback-spring.xml` 配置了多模块日志分离输出,按类别将支付、任务、SQL、错误等日志写入不同文件,支持滚动策略与UTF-8编码。通过 `LogProxy.getLogger(&quot;LOG_NAME&quot;)` 获取指定日志器,实现精准日志记录,便于问题追踪与系统监控。(236字符)
|
1天前
|
JSON Java Maven
SpringBoot使用汇总
Spring Boot是Spring框架的延伸,旨在简化Spring应用的初始搭建与开发过程。它通过自动配置、内嵌服务器、开箱即用的依赖等方式,极大减少了项目配置和编码量,提升开发效率。支持快速构建微服务,是Java EE开发的主流趋势。
|
1天前
|
SQL Java 关系型数据库
分页
本文介绍了五种分页实现方式:MyBatis自带RowBounds内存分页、PageHelper插件分页、SQL原生分页、数组分页及拦截器分页。对比了逻辑分页(内存处理)与物理分页(数据库层处理)的优劣,指出大数据量下应优先选用物理分页以避免内存溢出,提升性能。
|
1天前
|
存储 NoSQL Linux
MongoDB单机部署
提供Win32/64位MongoDB安装包,支持命令行或配置文件启动,Linux与Windows系统均可部署。建议选择y为偶数的稳定版本,通过官网下载并解压,配置data目录及mongod.conf,使用mongod启动服务,mongo命令连接。可选Compass图形化工具管理数据库。注意端口、路径格式与防火墙设置。
|
1天前
|
Java 调度
线程池
线程池通过复用线程提升性能,避免频繁创建销毁的开销。Java中由Executor框架实现,核心为ThreadPoolExecutor,管理线程生命周期与任务调度。通过Executors工厂创建,支持提交异步任务、定时执行等。关键组件包括工作队列、线程工厂与拒绝策略,实现高效并发控制。(238字)
|
2天前
|
存储 安全 Java
Java泛型类型擦除以及类型擦除带来的问题
Java泛型在编译时会进行类型擦除,所有泛型信息被移除,替换为原始类型(如Object或限定类型)。例如,List&lt;String&gt;和List&lt;Integer&gt;在运行时均为List,导致无法通过instanceof判断泛型类型。类型检查在编译期完成,基于引用而非实际对象。擦除后,编译器自动插入强制转换保证类型安全。但这也引发多态冲突、静态成员限制等问题,需通过桥方法等机制解决。基本类型不能作为泛型参数,静态上下文中也不能使用类级别泛型参数。
|
1天前
|
Java
常见加载顺序
本示例展示了Java中各类代码块的执行顺序:静态代码块随类加载仅执行一次,优先于主函数;局部代码块在方法内直接运行;构造代码块每次创建对象前自动执行,早于构造器。输出结果体现三者优先级:静态 &gt; 局部 &gt; 构造。
|
2天前
|
Java 大数据
ArrayList扩容机制
ArrayList添加元素时,先调用ensureCapacityInternal()确保容量,首次添加时默认扩容至10。每次扩容通过grow()实现,新容量为原容量的1.5倍(oldCapacity + (oldCapacity &gt;&gt; 1)),提升性能。add第11个元素时再次触发扩容。length为数组属性,length()是字符串方法,size()用于集合获取元素数。
|
1天前
|
自然语言处理 fastjson Java
大面积故障规避案例
本文记录了一次由Kotlin语法误用引发的FastJson反序列化全局异常问题。因混编环境下将`{}`误赋值给Java对象字段,导致FastJson解析时触发静态标记位`kotlin_error`,进而使整个应用反序列化失效。排查耗时两天,揭示了多语言混编、框架兼容性及静态状态风险等深层问题,值得开发者警惕。