前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MapStruct 爬坑指南

MapStruct 爬坑指南

作者头像
tanoak
发布2018-12-21 13:14:07
5.1K0
发布2018-12-21 13:14:07
举报
文章被收录于专栏:java闲聊
  1. pom配置
  2. 基本使用
  3. 结合lombok使用
  4. mapStruct解析
  5. 参考资料

pom配置

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

代码语言:javascript
复制
<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 以及构造方法,自行添加

代码语言:javascript
复制
public class CarDto {
 
    private String make;
    private int seatCount;
    private String type;
 
    //constructor, getters, setters ...
}
代码语言:javascript
复制
public class Car {

    private String make;
    private int numberOfSeats;
}
代码语言:javascript
复制
@Mapper
public interface CarMapper {
 
    CarMapper INSTANCE = Mappers.getMapper( CarMapper.class );
 
    @Mapping(source = "numberOfSeats", target = "seatCount")
    CarDto carToCarDto(Car car);
}

test

代码语言:javascript
复制
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也会出现这个报错

代码语言:javascript
复制
Error:(12, 5) java: No property named "numberOfSeats" exists in source parameter(s). Did you mean "null"?
代码语言:javascript
复制
<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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.12.02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • pom配置
  • 基本使用
  • 结合lombok使用
  • mapStruct解析
  • 参考资料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档