背景:spring项目中,每个模块层次分明,最常见的service为业务模块,会有大量的构建对象的过程,这一点可以结合Mapstrust进行整合
目录
一、mapStrust坐标
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>1.5.0.Beta1</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.5.0.Beta1</version>
</dependency>
二、mapStrust特点
1: 基于编译期间生产代码、
2:性能高,精细控制,解耦
三:插件
MapStruct Support
四:基本使用
1:可以使用@Mapper(componentModel = "spring")整合spring,生成实现类将出现@Componet,
被spring托管
2:注入自己实例,CrmTripConvert INSTANCE = Mappers.getMapper(CrmTripConvert.class);
3:写方法接口,支持映射规则,支持复合型注解,可自定义注解来忽略某些字段
4:对于批量的转换,必须保证单个的只有一个,否则实现类不知道用哪一个
@Mapper(componentModel = "spring")
public interface CrmTripConvert {
CrmTripConvert INSTANCE = Mappers.getMapper(CrmTripConvert.class);
@IgnoreBaseEntity
CrmTripVo convertPoToVo(CrmTrip trip);
@IgnoreBaseEntity
List<CrmTripVo> batchConvertPoToVo(List<CrmTrip> tripList);
}
五:service改造
1:小编开发认为,service中构建对象非常常见,而这种构建对象,其实不会重复使用
可以结合mapSTtust,使用default来将这些构建方法拆除,从而减轻service
2:此方法,必须保证方法名规范,写明注释,否则不好维护
@Mapper(componentModel = "spring")
public interface CrmUserConvert {
CrmUserConvert INSTANCE = Mappers.getMapper(CrmUserConvert.class);
/**
* 根据产品id,用户id,返回用户
*
* @param crmProductId crm产品id
* @param id id
* @return {@link CrmUser}
*/
default CrmUser buildUserByCrmProductIds(String crmProductId,String id){
CrmUser user = new CrmUser();
user.setId(id);
user.setCrmProductIds(crmProductId);
return user;
}
}