万字详解 MapStruct Plus,带你快速上手!

与其明天开始,不如现在行动!


前言

Mapstruct 是一个代码生成器,基于约定优于配置的方法,极大简化了 Java bean 类型之间映射的实现,特点:速度快、类型安全且易于理解。

Mapstruct Plus 是 MapStruct 的增强工具(类似于 Mybatis 和 Mybatis Plus 的关系),其在 MapStruct 的基础上,实现了自动生成 Mapper 接口的功能,并强化了部分功能,使 Java 类型转换更便捷、优雅。

MapStruct Plus 内嵌 MapStruct,和 MapStruct 完全兼容,如果之前已经使用 MapStruct,可以无缝替换依赖。
参考网站:
MapStruct 官网
MapStruct Plus 官网


一、为什么要用 MapStruct(背景)

目前的系统开发中,对象模型之间需要相互转换,比如一个 User 对象需要转换为 UserVo 对象:

@Data
public class User {
   
   
    private String name;
    private int age;
    private String password;
}
@Data
public class UserVo {
   
   
    private String name;
    private int age;
}

常规的有两种方式:

  1. 使用 getter 和 setter 方法进行赋值,但是这个方法有着大量枯燥且重复的工作,一旦出错也不易于发现,可读性差。
  2. 使用 spring 提供的 BeanUtils 工具类进行对象之间的转换,如下代码块所示,但是因为内部采用反射实现,性能低下,出现问题时不容易调试。
// 创建一个 User 对象
User user = new User();
user.setName("wen");
user.setAge(18);
user.setPassword("123456");
// 创建一个 UserVo 对象
UserVo userVo = new UserVo();
// 一行代码实现 user => userVo
BeanUtils.copyProperties(user, userVo);

所以 MapStruct 应运而生,这个框架是基于 Java 注释处理器,定义一个转换接口,在编译的时候会根据接口类和方法相关的注解,自动生成实现类,底层是基于 getter 和 setter 方法的,比 BeanUtils 的性能要高。然而美中不足的是,当需要转换的对象较多或者结构复杂的时候,需要定义较多的转换接口和转换方法。

此时,就可以使用 MapStruct Plus ,一个注解就可以生成两个类之间的转换接口,使 Java 类型转换更加便捷和优雅。

二、MapStruct Plus 的快速开始

本文以 Spring Boot 项目为例,版本:
Spring Boot:3.3.2
JDK:17
Lombok:1.18.34

1. 引入依赖

引入 mapstruct-plus-spring-boot-starter 依赖

<dependency>
    <groupId>io.github.linpeilie</groupId>
    <artifactId>mapstruct-plus-spring-boot-starter</artifactId>
    <version>1.4.3</version>
</dependency>

引入 Maven 插件,配置项目的构建过程(这一步非常非常重要!!!)
引入 Maven 插件,配置项目的构建过程(这一步非常非常重要!!!)
引入 Maven 插件,配置项目的构建过程(这一步非常非常重要!!!)

	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.8.1</version>
				<configuration>
					<source>17</source>
					<target>17</target>
					<annotationProcessorPaths>
						<path>
							<groupId>org.projectlombok</groupId>
							<artifactId>lombok</artifactId>
							<version>${lombok.version}</version>
						</path>
						<path>
							<groupId>io.github.linpeilie</groupId>
							<artifactId>mapstruct-plus-processor</artifactId>
							<version>${mapstruct-plus.version}</version>
						</path>
						<path>
							<groupId>org.projectlombok</groupId>
							<artifactId>lombok-mapstruct-binding</artifactId>
							<version>0.2.0</version>
						</path>
					</annotationProcessorPaths>
				</configuration>
			</plugin>
		
### MapStruct Plus Library Information and Usage MapStruct 是一种用于 Java 的代码生成器,旨在简化对象映射过程。然而,在提到 **MapStruct Plus** 时,这通常指的是基于原始 MapStruct 库之上构建的一个增强版本或扩展工具集。遗憾的是,关于具体名为 “MapStruct Plus” 的官方库存在较少直接提及。 对于类似的增强功能实现,开发者社区经常采用的方式是在标准 MapStruct 基础上加入自定义配置和支持特性来满足特定需求。例如: - 自动化处理复杂的数据转换逻辑 - 提供更灵活的依赖注入支持 - 集成其他框架如 Spring Boot 或 Micronaut 来优化开发体验 为了更好地理解如何利用这些高级特性和最佳实践方法,可以参考一些开源项目案例以及相关博客文章中的讨论[^1]。 #### 安装与基本设置 尽管没有专门针对所谓“Plus”的安装指南,但可以通过 Maven 或 Gradle 添加常规 MapStruct 依赖项作为起点: ```xml <!-- For Maven --> <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct</artifactId> <version>1.5.2.Final</version> </dependency> <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-processor</artifactId> <version>1.5.2.Final</version> <scope>provided</scope> </dependency> ``` ```groovy // For Gradle implementation 'org.mapstruct:mapstruct:1.5.2.Final' annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.2.Final' ``` #### 创建 Mapper 接口 通过创建接口并应用 `@Mapper` 注解来自动生成映射类: ```java import org.mapstruct.Mapper; import org.mapstruct.Mapping; @Mapper(componentModel = "spring") public interface CarMapper { @Mapping(source = "make", target = "manufacturer") CarDTO carToCarDto(Car car); } ``` 上述代码片段展示了如何定义一个简单的映射关系,其中源属性名称 (`make`) 被转换为目标 DTO 中的不同段名 (`manufacturer`) .
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

给我点时间看书

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值