MapStruct是一款很是实用Java工具,主要用于解决对象之间的拷贝问题,好比PO/DTO/VO/QueryParam之间的转换问题。区别于BeanUtils这种经过反射,它经过编译器编译生成常规方法,将能够很大程度上提高效率。@pdaihtml
首先看下这类工具出现的背景。@pdaijava
在开发的时候常常会有业务代码之间有不少的 JavaBean 之间的相互转化,好比PO/DTO/VO/QueryParam之间的转换问题。以前咱们的作法是:git
拷贝技术github
纯get/setspring
MapSturct 是一个生成类型安全, 高性能且无依赖的 JavaBean 映射代码的注解处理器(annotation processor)。apache
工具能够帮咱们实现 JavaBean 之间的转换, 经过注解的方式。json
同时, 做为一个工具类,相比于手写, 其应该具备便捷, 不容易出错的特色。api
这里展现最基本的PO转VO的例子,使用的是IDEA + Lombok + MapStruct缓存
注意:基于当前IDEA设置并不须要
mapstruct-processor
的依赖安全
通常来讲会加载两个包:
org.mapstruct:mapstruct
: 包含Mapstruct核心,好比注解等;若是是mapstruct-jdk8
会引入一些jdk8的语言特性;org.mapstruct:mapstruct-processor
: 处理注解用的,能够根据注解自动生成mapstruct的mapperImpl类以下示例基于IDEA实现,能够在build阶段的annotationProcessorPaths
中配置mapstruct-processor
的path。
<packaging>jar</packaging> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <org.mapstruct.version>1.4.0.Beta3</org.mapstruct.version> <org.projectlombok.version>1.18.12</org.projectlombok.version> </properties> <dependencies> <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct</artifactId> <version>${org.mapstruct.version}</version> </dependency> <!-- lombok dependencies should not end up on classpath --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${org.projectlombok.version}</version> <scope>provided</scope> </dependency> <!-- fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.71</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies> <build> <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version