MapStruct,降低无用代码的神器
作者:王子林(寥天) 出品:大淘宝技术
在学习《告别BeanUtils,Mapstruct从入门到精通》后,我发觉MapStruct确实是一个提升系统性能,降低无用 代码的神器。然而,在实践这篇文章过程中,我遇到了些问题,并由此对MapStruct框架有了更深入的理解,以下将我的学习收获分享给大家。
本文与《告别BeanUtils,Mapstruct入门到精通》的主要不同之处主要在于: 增加了不同环境下Maven引入的注意事项(见“引入”章)
增加了一对多字段(例如Json字段)互转的代码(见“高级转换”第一节) 增加了子类字段互转的代码(见“高级转换”第二节)
增加了利用Spring进行依赖注入的代码(见“高级转换”第三节)
MapStruct是什么?
MapStruct is a code generator that greatly simplifies the implementation of mappings between Java bean types based on a convention over configuration approach.——https://mapstruct.org/
从官方定义来看,MapStruct类似于我们熟悉的BeanUtils, 是一个Bean的转换框架。
In contrast to other mapping frameworks MapStruct generates bean mappings at compile-time which ensures a high performance, allows for fast developer feedback and thorough error checking.—— https://mapstruct.org/
他与BeanUtils最大的不同之处在于,其并不是在程序运行过程中通过反射进行字段复制的,而是在编译期生成用于字段复制的代码(类似于Lombok生成get()和set()方法),这种特性使得该框架在运行时相比于BeanUtils有很大的性能提升。
引入
Maven
由于MapStruct和Lombok都会在编译期生成代码,如果配置不当,则会产生冲突,因此在工程中同时使用这两个 包时,应该按照以下方案导入:
当POM中不包含Lombok时
<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> </dependency>
带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(2)https://developer.aliyun.com/article/1339762?groupCode=taobaotech