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
相关文章
|
8月前
|
安全 Unix API
告别混乱时间处理:Python中time与datetime模块的实用选择
告别混乱时间处理:Python中time与datetime模块的实用选择
447 126
|
9月前
|
存储 NoSQL 关系型数据库
4-MongoDB索引知识
MongoDB索引基于B树结构,可高效支持查询,避免全表扫描。主要类型包括单字段、复合、地理空间、文本及哈希索引,适用于不同查询场景,显著提升查询性能。
|
9月前
|
监控 算法 Unix
Thread.sleep(0) 到底有什么用(读完就懂)
本文深入解析Thread.Sleep函数的工作原理,结合操作系统调度机制,揭示Sleep(1000)未必准时唤醒、Sleep(0)却能触发CPU重新竞争的真相,帮助开发者正确理解线程挂起与CPU调度的关系。
|
9月前
|
NoSQL Java 测试技术
5-MongoDB实战演练
本文介绍某头条文章评论系统的设计与实现,基于SpringDataMongoDB构建微服务,完成评论的增删改查、按文章ID查询、分页查询及点赞功能。通过MongoTemplate优化点赞操作,提升性能,并使用索引提高查询效率,整体方案高效且可扩展。
|
9月前
|
Java Maven
3. 打包
本文介绍Java项目打包部署的两种方式:一是将所有内容打包进单一JAR文件,通过Maven配置、打包命令及运行指令实现快速启动与后台运行;二是将主JAR、依赖与配置文件分离,提升灵活性与维护性,并提供端口查询与进程终止方法,便于服务管理。
3. 打包
|
9月前
|
安全 Java 数据安全/隐私保护
2.通用权限管理模型
本文介绍了ACL和RBAC两种常见的权限模型。ACL通过直接为用户或角色授权,实现简单但管理复杂;RBAC则基于角色分配权限,结构清晰、易于维护,并细分为RBAC0至RBAC3四个等级,逐步引入角色继承与职责分离机制,提升系统安全与灵活性。
|
9月前
|
安全 Java 开发工具
1.工程搭建与验证
本文介绍如何使用阿里云脚手架快速搭建SpringBoot工程,并整合Spring Security。内容涵盖项目创建、代码导入、Web依赖配置及安全验证,启动后自动跳转登录页,使用默认用户即可访问受保护资源,附完整代码仓库地址。
|
9月前
|
存储 JSON NoSQL
3-MongoDB常用命令
本文介绍MongoDB数据库操作,包括创建与删除数据库、集合的显式与隐式创建、文档的增删改查、批量操作、分页查询及排序统计等基本CRUD操作,适用于文章评论数据管理。
|
9月前
|
缓存 Java 数据库连接
1.常见配置
本文介绍MyBatis核心配置,包括属性加载优先级(方法参数 &gt; resource/url &gt; properties元素)、常用配置项如缓存、延迟加载、执行器类型等,以及多环境配置与事务管理机制,适用于结合Spring使用时的配置参考。
|
9月前
|
SQL 缓存 Java
汇总
本文介绍MyBatis核心配置与使用技巧,涵盖属性加载优先级、多环境配置、事务管理、XML映射(一对一、一对多、多对多)、分页实现方式(逻辑与物理分页)及缓存机制,并简析执行器类型与批量操作原理,助力高效开发。

热门文章

最新文章