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/13 1:00:11

计算机毕设java党支部信息管理系统的设计与实现 基于Java的党支部信息综合管理系统开发与应用研究 Java技术驱动的党支部信息管理平台设计与实现

计算机毕设java党支部信息管理系统的设计与实现85c619 &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。随着信息技术的飞速发展&#xff0c;党支部信息管理逐渐从传统的人工模式转…

作者头像 李华
网站建设 2026/4/16 15:24:15

设备DNS解析慢致连接延迟 后来启用本地缓存与异步查询

&#x1f493; 博客主页&#xff1a;塔能物联运维的CSDN主页目录物联网运维&#xff1a;当科技遇上"薛定谔的信号" 一、我的物联网修罗场 二、物联网设备的"性格缺陷" 三、运维界的"薛定谔"现象 四、那些年我们踩过的"坑" 五、运维人的…

作者头像 李华
网站建设 2026/4/16 13:59:00

超越线性计算:多维计算重塑AI工厂设计

与传统线性计算不同&#xff0c;多维计算同时在多个维度上运行&#xff0c;解锁了人工智能工作负载所需的本机并行性和更丰富、更具表达力的数据表示形式[citation:1]。 多维计算正在改变AI工厂&#xff0c;使其能够快速高效地处理复杂任务。通过超越传统计算限制&#xff0c;它…

作者头像 李华
网站建设 2026/4/15 9:48:25

大学生必备!9个免费AI写论文工具,真实参考文献+AIGC率低至9%

如果你此刻正盯着空白的Word文档&#xff0c;脑子里一团浆糊&#xff0c;距离Deadline只剩72小时&#xff0c;导师的催稿消息像定时炸弹一样响个不停&#xff0c;而你的钱包在知网查重面前瑟瑟发抖…那么&#xff0c;这篇为你量身定制的“救命指南”&#xff0c;请务必一字不落…

作者头像 李华
网站建设 2026/4/15 17:01:51

GitHub 热榜项目 - 日榜(2025-12-19)

GitHub 热榜项目 - 日榜(2025-12-19) 生成于&#xff1a;2025-12-19 统计摘要 共发现热门项目&#xff1a; 12 个 榜单类型&#xff1a;日榜 本期热点趋势总结 本期GitHub热点显示AI应用全面开花&#xff0c;尤其聚焦于金融量化、智能体和语音合成领域。AI对冲基金和OpenB…

作者头像 李华
网站建设 2026/4/16 13:42:08

【读书笔记】《手机上瘾》

《The Phone Fix》书籍解读&#xff1a;修复手机不当使用行为 这本书于2025年10月出版&#xff0c;作者菲伊贝格蒂&#xff08;Fiyin Begho&#xff09;是剑桥大学医学学位与神经科学博士&#xff0c;现任牛津大学医院神经科医生。书中聚焦当代大痛点——手机不当使用行为&…

作者头像 李华