MapStruct 快速入门
MapStruct
MapStruct – Java bean mappings, the easy way!
官方网站
https://mapstruct.org https://mapstruct.org/documentation/stable/reference/html/#lombok
MapStruct可以在编译时,生成DTO和DO的映射,我们只需要定义好DTO和DO之间的映射关系即可,解放生产力。还可以和Lombok结合使用。
MapStruct + Lombok 强强联合
<properties> <org.mapstruct.version>1.4.2.Final</org.mapstruct.version> <org.projectlombok.version>1.18.16</org.projectlombok.version> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct</artifactId> <version>${org.mapstruct.version}</version> </dependency> <!-- lombok dependency should not end up on classpath --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${org.projectlombok.version}</version> <scope>provided</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.8</source> <target>1.8</target> <annotationProcessorPaths> <path> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-processor</artifactId> <version>${org.mapstruct.version}</version> </path> <path> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${org.projectlombok.version}</version> </path> <!-- additional annotation processor required as of Lombok 1.18.16 --> <path> <groupId>org.projectlombok</groupId> <artifactId>lombok-mapstruct-binding</artifactId> <version>0.1.0</version> </path> </annotationProcessorPaths> </configuration> </plugin> </plugins> </build>
MapStruct 案例及测试代码
@Getter @Setter public class DoctorDTO { private Integer id; private String name; } @Getter @Setter public class Doctor { private Integer id; private String name; } // 定义DTO与实体之间的转换 @Mapper public interface DoctorMapping { DoctorMapping INSTANCE = Mappers.getMapper(DoctorMapping.class); DoctorDTO toDTO(Doctor doctor); } // 测试类 public class MapStructTest { @Test public void testToDTO() { Integer id = 9527; String name = "zxx"; Doctor doctor = new Doctor(); doctor.setId(id); doctor.setName(name); DoctorDTO doctorDTO = DoctorMapping.INSTANCE.toDTO(doctor); Assert.assertEquals(id, doctorDTO.getId()); Assert.assertEquals(name, doctorDTO.getName()); } }
认识两个注解
@Mapper
标识这个文件是MapStruct映射文件,需要将该文件定义为接口或者抽象类,mapstruct插件会在编译时根据接口中的方法生成实现类,类中包含DTO和DO的转换代码。
@Mapping
@Mapping用于指定字段名不一致情况下的映射关系
@Mapper public abstract class SourceMapping { public static final SourceMapping INSTANCE = Mappers.getMapper(SourceMapping.class); @Mapping(target = "targetName", source = "sourceName") public abstract Target toTarget(Source source); }
enjoy yourself!!!
作者:努力为明天
-------------------------------------------
个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)