前言
日常开发中,我们经常会有对于不同领域层使用不同的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文件中引入以下依赖
<properties>
<mapstruct.version>1.4.2.Final</mapstruct.version>
</properties>
<dependencies>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-jdk8</artifactId>
<version>${mapstruct.version}</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct.version}</version>
</dependency>
</dependencies>