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

简介: 本文介绍MyBatis中四种关联映射:一对一(resultMap解决字段与属性映射)、一对多(使用`<collection>`映射集合)、多对一(使用`<association>`关联对象)及多对多(通过中间类结合`<collection>`实现)。适用于处理数据库表间复杂关系,提升数据封装灵活性。

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
相关文章
|
SQL Java 数据库连接
|
6月前
|
Java 数据库连接 数据库
MyBatis的常见配置
在mybatis配置过程中的部分总结
168 0
|
4月前
|
人工智能 弹性计算 自然语言处理
【手把手教程】阿里云OpenClaw一键部署指南,两步解锁龙虾AI助理!
2026年爆火的开源AI智能体OpenClaw(“龙虾AI”),以红色龙虾为标,主打“能动手做事”:支持文件管理、浏览器自动化、代码编写等本地执行能力,真正实现“聊天即行动”。本文提供阿里云一键部署保姆级教程——零代码、两步完成,轻松拥有专属AI助理!
1070 3
|
7月前
|
弹性计算
云服务器最便宜多少钱一年?阿里云38元1年云服务器配置、价格及购买限制说明
云服务器最便宜多少钱一年?阿里云38元1年云服务器配置、价格及购买限制说明来了!现在阿里云服务器最便宜多少钱一年?38元一年,配置、价格及购买限制介绍来了,亲身测试是38元一年,价格确实便宜,38元一年相当于3元1个月、一毛钱一天。这是一台轻量应用服务器,200M峰值带宽、2核2G、40G ESSD系统盘,不限流量。
|
8月前
|
机器学习/深度学习 搜索推荐 JavaScript
基于python深度学习的经典名著推荐系统
本系统基于Python深度学习技术,结合Django与Vue.js框架,构建智能化经典名著推荐平台。通过分析用户行为与文本特征,实现个性化精准推荐,提升阅读体验,助力经典文化传承与数字阅读升级。
|
消息中间件 存储 安全
微服务之间的数据依赖问题是怎样的?
微服务之间的数据依赖问题是怎样的?
623 0
微服务之间的数据依赖问题是怎样的?
|
关系型数据库 MySQL 数据库
图解MySQL【日志】——两阶段提交
两阶段提交是为了解决Redo Log和Binlog日志在事务提交时可能出现的半成功状态,确保两者的一致性。它分为准备阶段和提交阶段,通过协调者和参与者协作完成。准备阶段中,协调者向所有参与者发送准备请求,参与者执行事务并回复是否同意提交;提交阶段中,若所有参与者同意,则协调者发送提交请求,否则发送回滚请求。MySQL通过这种方式保证了分布式事务的一致性,并引入组提交机制减少磁盘I/O次数,提升性能。
1556 5
图解MySQL【日志】——两阶段提交
mybatis复习04高级查询 一对多,多对一的映射处理,collection和association标签的使用
文章介绍了MyBatis中高级查询的一对多和多对一映射处理,包括创建数据库表、抽象对应的实体类、使用resultMap中的association和collection标签进行映射处理,以及如何实现级联查询和分步查询。此外,还补充了延迟加载的设置和用法。
mybatis复习04高级查询 一对多,多对一的映射处理,collection和association标签的使用
|
XML Java 数据库连接
Myatis 系列之 一对多、多对一 及 ResultMap的使用
文章详细介绍了Mybatis中使用`resultMap`处理数据库表字段名和实体类属性名不一致问题,以及实现一对多和多对一关系映射的方法,并提供了相应的XML配置和测试用例。
Myatis 系列之 一对多、多对一 及 ResultMap的使用
|
NoSQL Java Redis
开发实战:使用Redisson实现分布式延时消息,订单30分钟关闭的另外一种实现!
本文详细介绍了 Redisson 延迟队列(DelayedQueue)的实现原理,包括基本使用、内部数据结构、基本流程、发送和获取延时消息以及初始化延时队列等内容。文章通过代码示例和流程图,逐步解析了延迟消息的发送、接收及处理机制,帮助读者深入了解 Redisson 延迟队列的工作原理。