带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(5)

简介: 带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(5)

带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(4)https://developer.aliyun.com/article/1339760?groupCode=taobaotech

image.png多个字段转换为一个字段


常用于将多个字段转为JSON字段,在以下示例中,为了避免引入第三方包(如FastJson),仅使用字符串拼接两  个字段,Json方式同理。

@Mapper
public abstract class Converter {
public static Converter INSTANT = Mappers.getMapper(Converter.class);
@Mapping(target = "extra", source = "vo", qualifiedByName = "convertToExtra") public abstract DTO convert(VO vo);
@Named("convertToExtra")
public String convertToExtra(VO vo) {
return String.format("%s,%s", vo.getAge(), vo.getUserNick());
}

 

 

将多个字段转换为一个字段,需要以下几个步骤:

 

  1. 创建自定义转换方法(本例为convertToExtra()):

方法入参类型为被转换的类(本例为VO),出参为转换好的字段(本例为extra);

为方法加上@Named注解,并自定义该方法在mapStruct中的名字(本例中为convertToExtra)。

  1. 在转换方法上增加Mapping注解,其中:              source字段必须与转换方法入参名字相同(本例中均为vo); target 字 段 为 目 标 字 段 ( 本 例 中 为 extra); qualifiedByName字段为上述自定义的方法名字。

 

image.png将一个字段转换为多个字段

该方法常用于从JSON字段中取出数据。

原理与上述方法类似,定义两个自定义转换方法,用于转换extra字段。

 

@Mapper
public abstract class Converter {
public static Converter INSTANT = Mappers.getMapper(Converter.class);
@Mapping(target = "age", source = "extra", qualifiedByName = "extractAge") @Mapping(target = "userNick", source = "extra", qualifiedByName = "extractUserNick") public abstract VO convertToVO(DTO dto);
@Named("extractAge")
public Long extractAge(String extra) {
// 从extra中提取第一个值
return Long.valueOf(extra.split(",")[0]);
}
@Named("extractUserNick")
public String extractUserNick(String extra) {
// 从extra中提取第二个值return extra.split(",")[1];
}

 

 

 

image.png使用示例

 

final VO vo = VO.builder()
.id(1L)
.age(18L)
.userNick("Nick")
.build();
// 转为DTO
final DTO dto = Converter.INSTANT.convertToDTO(vo); System.out.println(dto);
// 转回VO
final VO newVo = Converter.INSTANT.convertToVO(dto); System.out.println(newVo);

 

输出:

1 DTO(id=1, extra=18,Nick)
2 VO(id=1, age=18, userNick=18)

 

带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(6)https://developer.aliyun.com/article/1339758?groupCode=taobaotech

 

相关文章
|
安全
带你读《2022技术人的百宝黑皮书》——如何避免写重复代码:善用抽象和组合(4)
带你读《2022技术人的百宝黑皮书》——如何避免写重复代码:善用抽象和组合(4)
带你读《2022技术人的百宝黑皮书》——性能优化之接口优化(4)
带你读《2022技术人的百宝黑皮书》——性能优化之接口优化(4)
105 0
带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(8)
带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(8)
带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(8)
|
网络协议
带你读《2022技术人的百宝黑皮书》——性能优化之接口优化(2)
带你读《2022技术人的百宝黑皮书》——性能优化之接口优化(2)
126 1
带你读《2022技术人的百宝黑皮书》——性能优化之接口优化(5)
带你读《2022技术人的百宝黑皮书》——性能优化之接口优化(5)
108 1
|
算法
带你读《2022技术人的百宝黑皮书》——性能优化之接口优化(3)
带你读《2022技术人的百宝黑皮书》——性能优化之接口优化(3)
|
SQL 缓存 JSON
带你读《2022技术人的百宝黑皮书》——性能优化之接口优化(1)
带你读《2022技术人的百宝黑皮书》——性能优化之接口优化(1)
158 1
带你读《2022技术人的百宝黑皮书》——性能优化之接口优化(6)
带你读《2022技术人的百宝黑皮书》——性能优化之接口优化(6)
|
安全
带你读《2022技术人的百宝黑皮书》——如何避免写重复代码:善用抽象和组合(2)
带你读《2022技术人的百宝黑皮书》——如何避免写重复代码:善用抽象和组合(2)
带你读《2022技术人的百宝黑皮书》——如何避免写重复代码:善用抽象和组合(2)
|
Java Spring
带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(7)
带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(7)
106 0