简介
MapStruct是一个代码生成器的工具类,简化了不同的Java Bean之间映射的处理,所以映射指的就是从一个实体变化成一个实体。在实际项目中,我们经常会将PO转DTO、DTO转PO等一些实体间的转换。在转换时大部分属性都是相同的,只有少部分的不同,这时我们可以通过mapStruct的一些注解来匹配不同属性,可以让不同实体之间的转换变的简单。
使用MapStruct在编译时会生成响应的转换实现类,所以没有性能损耗。
MapStruct官网地址: http://mapstruct.org/
搭建开发环境 –基于Maven
这里需要在配置文件pom.xml中进行如下配置:
MapStruct实体间的转换
下面我们就来看看如何使用MapStruct实现实体之间的映射转换。下面两个类非常相似,有一个号码属性名不一样及在PeopleDTO中有个User对象,而在People中则是两个字符串属性。
PeopleEntity.java
PeopleDTO.java
User.java
Mapper接口
要生成一个PeopleDTO与PeopleEntity对象相互转换的映射器,我们需要定义一个mapper接口。像这两个实体类有些属性不一样时,我们可以通过@Mapping注解来进行转换.
- @Mapper注解标记这个接口作为一个映射接口,并且是编译时MapStruct处理器的入口。
只有在接口加上这个注解, MapStruct 才会去实现该接口。
@Mapper 里有个 componentModel 属性,主要是指定实现类的类型,一般用到两个 default:默认,可以通过 Mappers.getMapper(Class) 方式获取实例对象
spring:在接口的实现类上自动添加注解,@Component,可通过 @Autowired 方式注入。 - @Mapping解决源对象和目标对象中,属性名字不同的情况。
- Mappers.getMapper自动生成的接口的实现可以通过Mapper的class对象获取,从而让客户端可以访问Mapper接口的实现。
- source:源属性
- target:目标属性
- dateFormat:String 到 Date 日期之间相互转换,通过 SimpleDateFormat,该值为SimpleDateFormat的日期格式
- ignore: 忽略这个字段
- @Mappings:配置多个@Mapping
- @MappingTarget 用于更新已有对象
- @InheritConfiguration 用于继承配置
这里只是列举了常用的字段和注解,详细的参考官方文档:http://mapstruct.org/documentation/stable/reference/html/
PeopleMapper.java
编译MapStruct
编译完后的实现类可以到target目录看到PeopleMapperImpl.Java,如下图:
这时你也可以点进看里面代码的实现PeopleMapperImpl.Java
Mapper使用
最后我们就来看看Mapper的使用
启动之后你可以在后台看到如下的输出
通过从上面后台输出的数据我们可以看出,对于属性名称不同的情况、以及属性类型不同都自动帮助我们转换了,是不是感觉很神奇,是不是感觉很强大.再也不用自己写大量的代码进行实体间的转换了。
本文转载于:https://blog.csdn.net/lx_yoyo/article/details/75061614