专栏首页java闲聊MapStruct 爬坑指南

MapStruct 爬坑指南

  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>

基本使用

省略了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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 迷人又诡异的辛普森悖论:同一个数据集是如何证明两个完全相反的观点的?

    在辛普森悖论中,餐馆可以同时比竞争对手更好或更差,锻炼可以降低和增加疾病的风险,同样的数据集能够用于证明两个完全相反的论点。

    大数据文摘
  • 『高级篇』docker之Mesos集群架构图(23)

    IT故事会
  • python基础类型(一):字符串和列表

    注意到最后三个的单双引号是嵌套使用的,但是最后一个的使用方法是错误的,因为当我们混合使用两种引号时必须有一种用来划分字符串的边界,即在两边的引号不能出现在字符串...

    渔父歌
  • Diss所有深度生成模型,DeepMind说它们真的不知道到底不知道什么

    深度学习在应用层面获得了巨大成功,这些实际应用一般都希望利用判别模型构建条件分布 p(y|x),其中 y 是标签、x 是特征。但这些判别模型无法处理从其他分布中...

    机器之心
  • 理解BitMap算法的原理

    位图:一种常用的数据结构,代表了有限域中的稠集(dense set),每一个元素至少出现一次,没有其他的数据和元素相关联。在索引,数据压缩,海量数据处理等方面有...

    我是攻城师
  • 多线程:为什么在while循环中加入System.out.println,线程可以停止

    这个我们都知道,由于 stopReqested 的更新值在主内存中,而线程栈中的值不是最新的,所以会一直循环,线程并不能停止。加上 Volatile 关键字后,...

    用户1655470
  • 一张图解释负载均衡

    首先当大量用户访问时候,先请求到nignx服务器,因为nignx对于高并发支持较好,所以由nignx服务器将访问需求分配给不同的apache服务器,apache...

    smy
  • TFS2018环境搭建一硬件要求

    TFS可以安装在Windows Server和Windows PC操作系统中,但是TFS2018和2018只支持64位操作系统中,早期的版本没有操作系统的位数限...

    郑小超.
  • 200行代码,一行行教你自制微信机器人

    1) 用一个windows客户端工具运营公众号,真的很局限。虽然工具的功能很强大,能自动添加好友,自动拉好友入群,关键字回复等等,但是有一个绕不开的点,它是一款...

    用户1634449
  • 一些常用的算法技巧总结

    数组的下标是一个隐含的很有用的数组,特别是在统计一些数字,或者判断一些整型数是否出现过的时候。例如,给你一串字母,让你判断这些字母出现的次数时,我们就可以把这些...

    帅地

扫码关注云+社区

领取腾讯云代金券