MapStruct 爬坑入门
-
-
pom配置
-
基本使用
-
结合lombok使用
-
mapStruct解析
-
参考资料
pom配置
第一步当然是引入pom依赖,目前1.3版本还是beta所以选择引入1.2版本,使用IDEA的小伙伴推荐去插件商店搜索MapStruct,下载插件可以获得更好的体验
<properties> <org.mapstruct.version>1.2.0.Final</org.mapstruct.version> </properties> <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-jdk8</artifactId> <version>${org.mapstruct.version}</version> </dependency> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.5.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> </annotationProcessorPaths> </configuration> </plugin> </plugins>
-
-
基本使用
省略了getters, setters 以及构造方法,自行添加
public class CarDto { private String make; private int seatCount; private String type; //constructor, getters, setters ... } public class Car { private String make; private int numberOfSeats; } @Mapper public interface CarMapper { CarMapper INSTANCE = Mappers.getMapper( CarMapper.class ); @Mapping(source = "numberOfSeats", target = "seatCount") CarDto carToCarDto(Car car); } test public static void main(String[] args) { Car car = new Car( "Morris", 120 ); //转换对象 CarDto carDto = CarMapper.INSTANCE.carToCarDto( car ); //测试 System.out.println( carDto ); System.out.println( carDto.getMake() ); System.out.println( carDto.getSeatCount() ); System.out.println(carDto.getType()); }
至此一个简单的demo就已经完成了,但是项目中会用到lombok插件,无法直接使用,因此开始对pom进行改造
结合lombok使用
修改pom依赖
注意防坑,这里maven插件要使用3.6.0版本以上、lombok使用1.16.16版本以上,不然会遇到感人的报错,除此之外没有写 getters, setters也会出现这个报错
Error:(12, 5) java: No property named "numberOfSeats" exists in source parameter(s). Did you mean "null"?
<plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.6.0</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>1.16.10</version> </path> </annotationProcessorPaths> </configuration> </plugin> </plugins>
完工,重复以上测试代码完美通过。至此完成,
mapStruct解析
有的小伙伴要问了这个mapStruct比modelmapper使用起来复杂多了,为什么用这个呢?答案是这个在编译期生成的代码,查看class文件,发现CarDto carToCarDto(Car car);这个方法的实现是在代码编译后就生成了,modelmapper则是基于反射的原理,速度自然不能比,要兴趣的小伙伴可以转去另一篇性能对比的文章查看