前言

日常开发中,我们经常会有对于不同领域层使用不同的JavaBean对象传输数据,避免相互影响的需求,因此基于数据库的实体对象User ,会衍生出诸如 UserAddRequest, UserQueryRequest, UserVO, UserDTO 等对象,在不同层级之间传输,不可避免的需要将这些对象进行相互转换操作

常见的转换方式有:

  • 调用getter/setter方法进行属性赋值
  • 调用BeanUtils.copyProperties() 进行反射属性赋值

第一种就不多说了,一大坨getter/setter 代码
第二种相对便捷一些,但是坑比较多,比如source和target写反,难以定位某个字段在那里进行的赋值,同时因为反射的关系,性能不佳

更多…

  • Spring BeanUtils
  • Apache BeanUtils
  • Dozer
  • Orika
  • MapStruct
  • ModelMapper
  • JMapper

MapStruct的介绍

MapStruct 是一个属性映射工具,只需要定义一个 Mapper 接口,MapStruct 就会自动实现这个映射接口,避免了复杂繁琐的映射实现。

在一个JavaWeb工程中会涉及到多种对象,po、vo、dto、entity、do、domain这些定义的对象运用在不同的场景模块中,这种对象与对象之间的互相转换,就需要有一个专门用来解决转换问题的工具。以前是通过反射的方法实现,但是现在无论是 BeanUtils, BeanCopier 等在使用反射的时候都会影响到性能,再后来自己写装换器但是会很浪费时间, 而且在添加新的字段的时候也要进行方法的修改。

MapSturct 是一个生成类型安全, 高性能且无依赖的 JavaBean 映射代码的注解处理器。作为一个工具类,相比于手写, 其具有便捷, 不容易出错的特点。

MapStruct的使用

引入依赖

maven工程需要在pom文件中引入以下依赖

  1. <properties>
  2. <mapstruct.version>1.4.2.Final</mapstruct.version>
  3. </properties>
  4. <dependencies>
  5. <dependency>
  6. <groupId>org.mapstruct</groupId>
  7. <artifactId>mapstruct-jdk8</artifactId>
  8. <version>${mapstruct.version}</version>
  9. </dependency>
  10. <dependency>
  11. <groupId>org.mapstruct</groupId>
  12. <artifactId>mapstruct-processor</artifactId>
  13. <version>${mapstruct.version}</version>
  14. </dependency>
  15. </dependencies>