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

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

.

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

image.png子类字段互转

 

@Mapper
public abstract class Converter {
public static Converter INSTANT = Mappers.getMapper(Converter.class);
@Mapping(target = "config.age", source = "age") @Mapping(target = "config.userNick", source = "userNick") abstract DTO convertToDTO(VO source);
@Mapping(target = "age", source = "config.age") @Mapping(target = "userNick", source = "config.userNick") abstract VO convertToVO(DTO dto);
}

 

 

image.png使用示例

final VO vo = VO.builder()
.id(1L)
.age(10L)
.gmtCreate(new Date())
.userNick("nick")
.build();
final DTO dto = Converter.INSTANT.convertToDTO(vo); System.out.println(dto);
final VO newVo = Converter.INSTANT.convertToVO(dto); System.out.println(newVo);

输出:

1DTO(id=1, gmtCreate=Fri Sep 16 00:09:05 CST 2022, config=DTO.Config(age=10, userNick=nick))
2VO(id=1, gmtCreate=Fri Sep 16 00:09:05 CST 2022, age=10, userNick=nick)

 

 

利用Spring进行依赖注入

 

本文以上示例代码中,都是使用Converter.INSTANT来获得Convert实例,这在业务代码中可能显得有些突兀,  而MapStruct提供了依赖注入的机制,让我们能够在Spring的环境下,更优雅的获得Converter,以下是一个例 子:

 

 

 

image.png转换器

该转换器转换字段完全相同的两个类:

@Mapper(componentModel = MappingConstants.ComponentModel.SPRING)
public abstract class Converter {
public abstract Target convert(Source source); 
}

与原有Converter相比,我们删除了丑陋的INSTANT声明:

 public static Converter INSTANT = Mappers.getMapper(Converter.class);

并修改了Mapper注解为:

 @Mapper(componentModel = MappingConstants.ComponentModel.SPRING)

 

 

image.png使用示例

在Spring上下文中,可以直接使用依赖注入注解(Autowired、Resource)获得对应的Converter

@Controller
public class MainController {
@Resource
private Converter convert;
@GetMapping("/") @ResponseBody public boolean test() {
final Source source = Source.builder()
.id(1L)
.age(18L)
.userNick("nick")
.build();
final Target result = convert.convert(source); System.out.println(result);
return true;
}
}

 

 

 

输出:

 Target(id=1, age=18, userNick=Nick)

 

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

相关文章
|
缓存 JSON 前端开发
带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(6)
带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(6)
|
9月前
|
机器学习/深度学习 人工智能 自然语言处理
|
Linux Shell 数据库
Linux下如何查找文件或目录
Linux使用find命令、locate命令、grep命令、whereis命令查找文件或目录。
1406 0
SpringBoot项目中使用request.getInputStream()获取参数时出现java.io.IOException: Stream closed
@RequestBody注解会先调用request.getInputStream()这个方法获取参数,然而request.getInputStream()这个流只能被读取一次,所以我们再次读取这个流就会报错。 解决方案: 最简单的方案就是 先读取流,然后在将流写进去就行了
1050 0
|
Java Maven 数据安全/隐私保护
Maven的<distributionManagement>标签使用
Maven的<distributionManagement>标签使用
782 0
Springboot接口同时支持GET和POST请求
Springboot接口同时支持GET和POST请求
898 0
|
SQL 大数据 Shell
大数据HBase JavaAPI工具类
大数据HBase JavaAPI工具类
175 0
置顶两个月!《程序员如何向架构师转型》神作在Github持续霸榜
企业架构在过去十年中取得了长足的进步。随着越来越多新技术出现,充分利用这些因素来将企业架构创建得更好十分重要。通过将新技术集成到企业架构中,即使在困难时期,也能取得丰硕的成果。
|
Java Redis
Jedis之pipeline
Jedis之pipeline
149 0
|
9月前
|
消息中间件 NoSQL Kafka
Redis事务与异步方式
Redis事务与异步方式
106 0

热门文章

最新文章