首页 > 其他分享 >MyBatis中的association与collection应用

MyBatis中的association与collection应用

时间:2023-07-29 10:56:07浏览次数:38  
标签:映射 private collection MyBatis id association


MyBatis中的association与collection应用

在使用 MyBatis进行数据库操作时,经常会遇到需要处理对象之间的关联关系和集合映射的情况。为了更好地实现对象关系映射,MyBatis提供了 associationcollection 两个核心功能,让我们可以更便捷地处理复杂的数据结构。本文将详细介绍在 MyBatis中如何应用 associationcollection

1. association 的应用

association 用于建立两个表之间的对象关联映射。假设我们有两个表:OrderUserOrder 表中有一个字段 user_id 关联到 User 表的主键 id。通过 association,我们可以在查询 Order 的同时将对应的 User 对象关联起来。

首先,我们定义实体类 OrderUser

 1 @TableName("order")
 2 @Data
 3 public class Order {
 4     @TableId(value = "id", type = IdType.ASSIGN_ID)
 5     private Long id;
 6 
 7     @TableField("order_no")
 8     private String orderNo;
 9 
10     @TableField("user_id")
11     private Long userId;
12 
13     @TableField(exist = false)
14     private User user;
15 }

 

接下来,配置 XML 映射文件 OrderMapper.xml

<resultMap id="OrderMap" type="com.test.entity.Order">
    <id property="id" column="id"/>
    <result property="orderNo" column="order_no"/>
    <association property="user" javaType="com.test.entity.User">
        <id property="id" column="user_id"/>
        <result property="username" column="username"/>
        <result property="email" column="email"/>
    </association>
</resultMap>

<select id="getOrderWithUser" resultMap="OrderMap">
    SELECT o.*, u.username, u.email
    FROM fs_test_order o
             LEFT JOIN fs_test_uesr u ON o.user_id = u.id
    WHERE o.id = #{id}
</select>

 

OrderMapper 接口中定义查询方法:
Order getOrderWithUser(Long id);
在查询 Order 时,通过 association 的配置,MyBatis 会自动将关联的 User 对象映射到 Orderuser 属性中。

2. collection 的应用

collection 用于实现一对多的集合映射关系。比如在一个 Department 表中有多个员工,通过 collection 可以将一个 Department 对象关联到多个 Employee 对象上。

首先,我们定义实体类 DepartmentEmployee

@TableName("employee")
@Data
public class Employee {
    @TableId(value = "id", type = IdType.ASSIGN_ID)
    private Long id;

    @TableField("name")
    private String name;

    @TableField("department_id")
    private Long departmentId;

}

 

@TableName("uesr")
@Data
public class User {
    @TableId(value = "id", type = IdType.ASSIGN_ID)
    private Long id;

    @TableField("username")
    private String username;

    @TableField("email")
    private String email;
}

 

接下来,配置 XML 映射文件 DepartmentMapper.xml

<resultMap id="DepartmentMap" type="jnpf.test.entity.Department">
    <id property="id" column="id"/>
    <result property="name" column="name"/>
    <collection property="employees" ofType="jnpf.test.entity.Employee">
        <id property="id" column="id"/>
        <result property="name" column="name"/>
    </collection>
</resultMap>

<select id="getDepartmentWithEmployees" resultMap="DepartmentMap">
    SELECT d.*, e.id, e.name
    FROM fs_test_department d
             LEFT JOIN fs_test_employee e ON d.id = e.department_id
    WHERE d.id = #{id}
</select>

 

DepartmentMapper 接口中定义查询方法:

 

Department getDepartmentWithEmployees(Long id);

 

在查询 Department 时,通过 collection 的配置,MyBatis 会自动将关联的多个 Employee 对象映射到 Departmentemployees 属性中。

结论

通过 associationcollection 的应用,我们可以轻松处理对象关联和集合映射的情况,简化了数据映射的过程。在实际应用中,根据数据库表之间的关系进行更复杂的配置,可以实现更丰富的数据查询和操作功能。MyBatis-Plus 的这些特性为开发人员提供了更高效便捷的数据持久化解决方案。

     

标签:映射,private,collection,MyBatis,id,association
From: https://www.cnblogs.com/daydreamer-fs/p/17588061.html

相关文章

  • Mybatis之动态查询:choose、when和otherwise标签使用
    【使用场景】有的时候,我们需要根据不同的选择,关联不同的表,这个时候<choose/><when/>和<otherwise>标签就发挥作用了。比如说,内部用户和外部用户表是分开的,在查询用户的时候,我们就需要根据角色类型去选择不同的关系表进行关联。SELECT*FROMrolerLEFTJOIN<!--当角色分类......
  • mybatis常用xml语法
    @Select("<script>"+"select"+"vga.plate_typeasplateType,"+"count(plate_info)ascounts"+"from"+"vehicle_gangqu_all......
  • Mybatis的工作原理
    1、读取Mabatis配置文件mabatis-config.xml为MyBatis的全局配置文件,配置了MaBatis的运行环境等信息,例如数据库连接信息。2、加载映射文件加载通过Mapper.xml配置或者注解的SQL映射,该文件中配置了操作数据库的SQL语句,需要在MaBatis配置文件mabatis-config.xml中加载。3、构造会话工......
  • 领略MyBatis-Flex的魅力
    一、MyBatis-Flex是什么MyBatis-Flex是一个优雅的MyBatis增强框架,它非常轻量、同时拥有极高的性能与灵活性。我们可以轻松的使用Mybaits-Flex链接任何数据库,其内置的QueryWrapper帮助我们极大的减少了SQL编写的工作的同时,减少出错的可能性。总而言之,MyBatis-Flex能够极......
  • 超越 Mybatis-Plus?超强 ORM 框架横空出世!
    点击“终码一生”,关注,置顶公众号每日技术干货,第一时间送达!1、MyBatis-Flex是什么MyBatis-Flex是一个优雅的MyBatis增强框架,它非常轻量、同时拥有极高的性能与灵活性。我们可以轻松的使用Mybaits-Flex链接任何数据库,其内置的QueryWrapper^亮点帮助我们极大的减少了SQL编写......
  • Mybatis-plus学习
    简介:MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。架包依赖<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.28</version></dependency><dependency> <groupId>org.......
  • Collection 和 Collections 有什么区别?list set map区别
    Collection和Collections有什么区别?java.util.Collection是一个集合接口(集合类的一个顶级接口)。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式,其直......
  • mybatis-plus:主键id、uuid
    mysql-8.0.33-winx64.zip(免安装版)springboot2.7.13Java8mybatis-plus-boot-starter3.5.3.1-- 序言本文测试&记录springboot项目中使用mybatis-plus时,主键(整型的id、字符串型的uuid)的生成。 准备工作mybatis-plus的springboot版本:<dependency> <g......
  • Mybatis从入门到精通深入学习路线?
    Mybatis从入门到精通深入学习路线?1.MyBatis基本概念和原理:-学习MyBatis的基本概念,包括SqlSessionFactory、SqlSession、Mapper等的作用和关系。-了解MyBatis的工作原理,包括SQL解析、参数映射、结果集映射等核心流程。2.环境搭建和配置:-下载MyBatis和相关依赖,并配置开发环境......
  • MyBatis
    MyBatis一.简介1.是什么MyBatis是一个优秀的基于java的持久层框架,它内部封装了JDBC,使开发者只需要关注SQL语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。MyBatis通过XML或注解的方式将要执行的各种statement配置起来,并通过JAVA对象和stateme......