简介

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

02-13 15:48