lombok是一款插件,在常用的开发工具eclipse和idea中都很好进行安装,具体安装方式请自行网上寻找。lombok提供了一些的的注解,会在编译期帮你自动生成一些代码。
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.18</version></dependency>
idea上需要安装plugin:
是提供了很多注解工具的一款插件,依赖于lombok,在这里主要介绍它的bean实例转化的用法。
有很多方式,比如自己new实例手动set来完成转化,还可以通过反射工具类BeanUtils,BeanCopier...(这里不去深究深copy和浅copy的概念)。使用mapstruct的注解可以在编译时自动生成bean转化的对应类和方法。
<lombok.version>1.16.18</lombok.version><mapstruct-jdk8.version>1.2.0.Final</mapstruct-jdk8.version><mapstruct-processor.version>1.2.0.Final</mapstruct-processor.version><dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId></dependency><dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-jdk8</artifactId> <version>${mapstruct-jdk8.version}</version></dependency><dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-processor</artifactId> <version>${mapstruct-processor.version}</version> <scope>provided</scope></dependency>
import org.mapstruct.BeanMapping;import org.mapstruct.Mapper;import org.mapstruct.factory.Mappers;import org.mapstruct.Mapping;import org.mapstruct.Mappings;@Mapperpublic interface MessageConverter { MessageConverter INSTANCE = Mappers.getMapper(MessageConverter.class); @BeanMapping(resultType = MessageMongoDto.class) MessageMongoDto messageTo2Dto(MessageTo messageTo);}@Mapperpublic interface ContentDataConverter { ContentDataConverter INSTANCE = Mappers.getMapper(ContentDataConverter.class); @Mappings({ @Mapping(source = "contentId",target = "contentId" ) }) ContentDataMongoTo contentDto2To(ContentDataMongoDto contentDataMongoDto);}
执行mvn clean install之后在工程的target\generated-sources目录里面会有对应的实现类生成:
@Generated( value = "org.mapstruct.ap.MappingProcessor", date = "2019-06-14T11:55:43+0800", comments = "version: 1.2.0.Final, compiler: javac, environment: Java 1.8.0_121 (Oracle Corporation)")public class MessageConverterImpl implements MessageConverter { @Override public MessageMongoDto messageTo2Dto(MessageTo messageTo) { if ( messageTo == null ) { return null; } MessageMongoDto messageMongoDto = new MessageMongoDto(); messageMongoDto.setId( messageTo.getId() ); messageMongoDto.setSendId( messageTo.getSendId() ); messageMongoDto.setTitle( messageTo.getTitle() ); messageMongoDto.setText( messageTo.getText() ); messageMongoDto.setChargeType( messageTo.getChargeType() ); return messageMongoDto; }}以及:@Generated( value = "org.mapstruct.ap.MappingProcessor", date = "2019-06-14T11:55:44+0800", comments = "version: 1.2.0.Final, compiler: javac, environment: Java 1.8.0_121 (Oracle Corporation)")public class ContentDataConverterImpl implements ContentDataConverter { @Override public ContentDataMongoTo contentDto2To(ContentDataMongoDto contentDataMongoDto) { if ( contentDataMongoDto == null ) { return null; } ContentDataMongoTo contentDataMongoTo = new ContentDataMongoTo(); contentDataMongoTo.setContentId( contentDataMongoDto.getContentId() ); contentDataMongoTo.setContentType( contentDataMongoDto.getContentType() ); contentDataMongoTo.setCreateTime( contentDataMongoDto.getCreateTime() ); contentDataMongoTo.setTagNames( contentDataMongoDto.getTagNames() ); return contentDataMongoTo; }}
接下来就可以直接通过MessageConverter.INSTANCE.messageTo2Dto进行方法的调用。
常用注解使用:
可以看到,这样就省去了自己手动set的麻烦,而且还能节省掉反射带来的性能开销。