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

本文涉及的产品
可观测监控 Prometheus 版,每月50GB免费额度
可观测可视化 Grafana 版,10个用户账号 1个月
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
简介: Mybatis 中的关系映射包括一对一、一对多和多对多。一对一映射可以通过ResultMap定义属性与字段的对应。一对多示例中,User类包含List<Role>,在User的mapper.xml中使用<collection>标签。多对一的情况,如Author与Blog,Blog的ResultMap中使用<association>来映射Author属性。多对多时,如部门与用户,通常需要中间表,并在双方实体中通过<collection>引用中间类,如UserForDept,来维护关系。

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
相关文章
|
6月前
|
SQL Java 数据库连接
|
SQL XML Java
Mybatis的三种映射关系以及联表查询
Mybatis的三种映射关系以及联表查询
123 0
|
6月前
|
XML Java 数据库连接
MyBatis--映射关系一对一和MyBatis--映射关系多对一 -都有基于xml和注解的教程
MyBatis--映射关系一对一和MyBatis--映射关系多对一 -都有基于xml和注解的教程
128 0
|
6月前
|
Java 数据库连接 mybatis
mybatis-2.映射关系(1-1 1-n n-n)
mybatis-2.映射关系(1-1 1-n n-n)
|
6月前
|
SQL Java 数据库连接
Mybatis的映射关系配置
Mybatis的映射关系配置
67 0
|
11月前
|
Java 数据库连接 数据库
Mybatis的关联关系配置一对一,一对多,多对多的映射关系
Mybatis的关联关系配置一对一,一对多,多对多的映射关系
131 0
|
SQL Java 数据库连接
Mybatis的关联关系映射以及自定义resultMap三种映射关系
Mybatis的关联关系映射以及自定义resultMap三种映射关系
149 0
|
SQL Java 数据库连接
【MyBatis】自定义resultMap三种映射关系
【MyBatis】自定义resultMap三种映射关系
54 0
|
Java
快速了解MyBatis---映射关系多对一
快速了解MyBatis---映射关系多对一
84 0
下一篇
无影云桌面