news 2025/12/24 11:33:53

MapStruct 映射接口的概念

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MapStruct 映射接口的概念

MapStruct 映射接口的概念

在 Java 开发中,对象之间的映射是一个常见的需求,比如将实体对象(Entity)映射为数据传输对象(DTO)。手动编写映射代码会很繁琐且容易出错,尤其是当对象的属性较多时。MapStruct 是一个代码生成器,它基于约定优于配置的理念,通过定义映射接口来自动生成对象映射的实现代码。

MapStruct 映射接口就是开发者定义的一个 Java 接口,在这个接口中声明用于对象映射的抽象方法。MapStruct 在编译时会根据这些方法的定义生成对应的实现类,从而实现对象之间的属性映射。

使用步骤

以下详细介绍如何使用 MapStruct 映射接口,包含添加依赖、定义实体类、定义映射接口以及使用生成的映射器。

1. 添加依赖

如果你使用的是 Maven 项目,在pom.xml文件中添加以下依赖:

<dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct</artifactId> <!-- 使用最新版本 --> <version>1.5.5.Final</version> </dependency> <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-processor</artifactId> <version>1.5.5.Final</version> <scope>provided</scope> </dependency>

如果你使用 Gradle 项目,在build.gradle文件中添加以下依赖:

implementation 'org.mapstruct:mapstruct:1.5.5.Final' annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.5.Final'
2. 定义实体类和 DTO 类

假设我们有一个User实体类和一个UserDTO数据传输对象类,代码如下:

// User 实体类 public class User { private String name; private int age; // 构造方法、Getter 和 Setter 方法 public User() {} public User(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } // UserDTO 数据传输对象类 public class UserDTO { private String name; private int age; // 构造方法、Getter 和 Setter 方法 public UserDTO() {} public UserDTO(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
3. 定义映射接口

创建一个映射接口UserMapper,使用@Mapper注解标记这个接口,MapStruct 会根据这个注解生成实现类。

import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; @Mapper public interface UserMapper { // 创建一个单例的映射器实例 UserMapper INSTANCE = Mappers.getMapper(UserMapper.class); // 定义映射方法,将 User 对象映射为 UserDTO 对象 UserDTO userToUserDTO(User user); }
4. 使用生成的映射器
public class Main { public static void main(String[] args) { // 创建一个 User 对象 User user = new User("John Doe", 30); // 使用 MapStruct 生成的映射器将 User 对象映射为 UserDTO 对象 UserDTO userDTO = UserMapper.INSTANCE.userToUserDTO(user); // 输出结果 System.out.println("Name: " + userDTO.getName()); System.out.println("Age: " + userDTO.getAge()); } }

解释

  • @Mapper注解:标记一个接口为映射接口,MapStruct 会在编译时为这个接口生成实现类。
  • Mappers.getMapper(Class<T> clazz)方法:用于获取映射接口的实例,通常将这个实例定义为静态常量。
  • 映射方法:在映射接口中定义的抽象方法,MapStruct 会根据方法的参数和返回类型自动生成映射逻辑。如果属性名和类型相同,会自动进行映射。

自定义映射规则

如果属性名或类型不同,可以使用@Mapping注解来指定映射规则。例如:

import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.factory.Mappers; @Mapper public interface UserMapper { UserMapper INSTANCE = Mappers.getMapper(UserMapper.class); @Mapping(source = "name", target = "fullName") UserDTO userToUserDTO(User user); }

在这个例子中,User类的name属性会映射到UserDTO类的fullName属性。

通过以上步骤,你就可以使用 MapStruct 映射接口实现对象之间的属性映射。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/19 9:03:05

越前易点订货:面向批发行业的 SaaS 订货进销存系统平台说明

一&#xff1a;项目背景及简介在批发行业&#xff0c;传统管理模式依赖手工统计&#xff0c;存在效率低下、易出错等问题&#xff0c;难以满足业务快速发展需求。随着数字化浪潮推进&#xff0c;批发行业急需一套全面、高效的数字化管理系统。在此背景下&#xff0c;我们团队历…

作者头像 李华
网站建设 2025/12/23 13:45:49

springboot古典舞在线交流平台的设计与实现(11525)

有需要的同学&#xff0c;源代码和配套文档领取&#xff0c;加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码&#xff08;前后端源代码SQL脚本&#xff09;配套文档&#xff08;LWPPT开题报告&#xff09;远程调试控屏包运行 三、技术介绍 Java…

作者头像 李华
网站建设 2025/12/21 16:57:17

python 批量将自己的csdn vip文章设为全部可见

你考虑过csdn审核的感受吗.jpg python 获取自己csdn vip可见文章的articleId curlconverter -CSDN博客 import requests# 原始获取文章列表的配置 cookies_get {保护隐私 }headers_get {accept: application/json, text/plain, */*,accept-language: zh-CN,zh;q0.9,en;q0.8,…

作者头像 李华
网站建设 2025/12/19 8:52:54

大学生必备6款AI论文神器:选题开题初稿降重全搞定!

如果你是正在熬夜赶Deadline的毕业生&#xff0c;面对空白的Word文档大脑一片空白&#xff1b;如果你是囊中羞涩的大学生&#xff0c;被知网动辄数百的查重费压得喘不过气&#xff1b;如果你是困在“修改-打回”循环里的研究生&#xff0c;对导师“再改改”的反馈感到绝望……那…

作者头像 李华