带你读《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

相关文章
|
存储 设计模式 算法
DDD之于业务支撑的意义
DDD之于业务支撑的意义
346 0
|
人工智能 搜索推荐 安全
GPT Prompt编写的艺术:如何提高AI模型的表现力
GPT Prompt编写的艺术:如何提高AI模型的表现力
600 0
|
8月前
|
云安全 弹性计算 安全
阿里云服务器安全攻略参考:基础防护与云安全产品简介
在使用云服务器的过程中,云服务器的安全问题是很多用户非常关心的问题,阿里云服务器除了提供基础的防护之外,我们也可以选择其他的云安全类产品来确保我们云服务器的安全。本文为您介绍阿里云服务器的基础安全防护机制,以及阿里云提供的各类云安全产品,帮助用户全面了解并选择合适的防护手段,为云上业务保驾护航。
979 11
|
SQL 存储 分布式计算
ODPS开发大全:入门篇(1)
ODPS开发大全:入门篇
1455 14
|
存储 架构师 测试技术
架构之道:人人都是架构师(2)
每个业务系统的开发者都应该具备一定的架构师素养,架构师的重要职责不仅仅是做决策,更重要的是提升团队的整体能力。一个好的架构师应该聚焦于业务和系统,定义问题和结果,设计系统、模块和代码,同时也需要解决跨域问题,确定团队间的边界,制定规范,统一语言,并创建一个让每个人都能成长为架构师的环境,以促进团队的敏捷性。本文旨在探讨如何培养架构思维,并阐述了架构师的职责、能力模型、方法论,以及如何成为架构师。
408 10
|
Java 编译器 API
带你了解“Java新特性——模块化”
带你了解“Java新特性——模块化”
481 11
|
安全 IDE Java
MapStruct-JavaBean映射工具使用指南
MapStruct-JavaBean映射工具使用指南
265 9
|
XML Java 程序员
Java的基础入门(1)
Java的基础入门
256 7
|
消息中间件 缓存 NoSQL
个人项目中技术落地的基础入门(2)
个人项目中技术落地的基础入门
234 7
|
存储 运维 架构师
架构之道:人人都是架构师(1)
架构之道:人人都是架构师
521 8