news 2026/4/15 17:55:02

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进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/8 7:47:05

springboot新闻推荐系统(11524)

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

作者头像 李华
网站建设 2026/4/2 23:47:53

org.eclipse.wst.common.project.facet.core.xml could not be read.

org.eclipse.wst.common.project.facet.core.xml could not be read.删除&#xff0c;重新拷贝一份过来就好了&#xff0c;有时候莫名其妙读取错误<?xml version"1.0" encoding"UTF-8"?> <faceted-project><installed facet"cloudf…

作者头像 李华
网站建设 2026/4/14 1:52:47

格雷厄姆特价股票策略在不同市场周期中的动态调整

格雷厄姆特价股票策略在不同市场周期中的动态调整 关键词:格雷厄姆特价股票策略、市场周期、动态调整、价值投资、股票分析 摘要:本文聚焦于格雷厄姆特价股票策略在不同市场周期中的动态调整。首先介绍了格雷厄姆特价股票策略的背景和重要性,明确了文章的目的、范围、预期读…

作者头像 李华