MapStruct 爬坑入门

  1. pom配置
  2. 基本使用
  3. 结合lombok使用
  4. mapStruct解析
  5. 参考资料

pom配置

第一步当然是引入pom依赖,目前1.3版本还是beta所以选择引入1.2版本,使用IDEA的小伙伴推荐去插件商店搜索MapStruct,下载插件可以获得更好的体验


    1.2.0.Final



    org.mapstruct
    mapstruct-jdk8
    ${org.mapstruct.version}


        
            org.apache.maven.plugins
            maven-compiler-plugin
            3.5.1
            
                1.8
                1.8
                
                    
                        org.mapstruct
                        mapstruct-processor
                        ${org.mapstruct.version}
                    
                
            
        
    

基本使用

省略了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"?
MapStruct 爬坑入门_第1张图片

   
          org.apache.maven.plugins
          maven-compiler-plugin
          3.6.0
          
              1.8
              1.8
              
                   
                       org.mapstruct
                       mapstruct-processor
                       ${org.mapstruct.version}
                    
                    
                      org.projectlombok
                      lombok
                      1.16.10
                     
              
          
    

完工,重复以上测试代码完美通过。至此完成,

mapStruct解析

有的小伙伴要问了这个mapStruct比modelmapper使用起来复杂多了,为什么用这个呢?答案是这个在编译期生成的代码,查看class文件,发现CarDto carToCarDto(Car car);这个方法的实现是在代码编译后就生成了,modelmapper则是基于反射的原理,速度自然不能比,要兴趣的小伙伴可以转去另一篇性能对比的文章查看

MapStruct 爬坑入门_第2张图片

参考资料

官方文档

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

你可能感兴趣的:(MapStruct 爬坑入门)