MapStruct 爬坑入门

  1. 目录

    1. pom配置

    2. 基本使用

    3. 结合lombok使用

    4. mapStruct解析

    5. 参考资料

    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>

     

  2. 基本使用

    省略了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则是基于反射的原理,速度自然不能比,要兴趣的小伙伴可以转去另一篇性能对比的文章查看

     

    参考资料

    官方文档

    https://blog.csdn.net/paincupid/article/details/71247255

posted @ 2019-01-22 10:17  tanoak  阅读(8573)  评论(0编辑  收藏  举报