mapstruct 的好处
安全且高性能。因为他是在编译阶段生成get/set代码,没有用到反射,不会造成额外的性能损失。
使用也非常简单,一行代码基本就转好了,有特殊需要处理的通过映射就可以
springboot2.2 jar
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-jdk8</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<scope>provided</scope>
</dependency>
基本使用
@Mapper
public interface UserConvert {
UserConvert INSTANCE = Mappers.getMapper(UserConvert .class);
UserDto to(UserBo UserBo);
UserVO to(UserDto dto);
List<UserVO> to(List<UserDto> dtoList);
}
当属性不一样 类型也不一样时
@Mapper(uses = Transform.class) //在类上面
public interface UserConvert
@Mappings({
@Mapping(source = "xxStr", target = "xxList")
})
UserDto to(UserBo UserBo);
public class TypeTransform {
public List<Integer> stringToList(String value){
if(StringUtils.isNotEmpty(value)){
List<Integer> list= Arrays.asList(value .split(",")).stream().map(s -> (Integer.parseInt(s.trim()))).collect(Collectors.toList());
return list;
}
return null;
}
}
库里存着int状态 要转成相对应的枚举
@Mapper(imports = {HandleHelper.class})
public interface UserConvert {
UserConvert INSTANCE = Mappers.getMapper(UserConvert .class);
List<UserVo> to(List<UserDto> dtoList);
@Mappings({
@Mapping(target = "xxStr", expression = "java(HandleHelper.toxStatus(dto.getxxandard()))"),
@Mapping(target = "xxxStr", expression = "java(HandleHelper.toxxStatus(dto.getxxxpe()))"),
@Mapping(target = "xxxxStr", expression = "java(HandleHelper.toxxxce(dto.getxxxxxrces()))"),
@Mapping(target = "xxxxxStr", expression = "java(HandleHelper.toxxxxke(dto.getxxxxxatus()))")
})
UserVo to(UserDto dto);
}
public class HandleHelper {
public static String toxxStatus(int xx){
xxxEnum type = xxxxEnum.getType(xx);
if (null != type) {
return type.getName();
} else {
return "";
}
}
````````//对应四个方法 这里只展示一个
}