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

相关文章
|
5月前
|
数据采集 存储 编解码
智源RoboCOIN重磅开源!全球本体数最多、标注最精细、使用最便捷的高质量双臂机器人真机数据集来了
北京智源研究院联合多家机构发布全球首个“本体数最多、标注最精细、使用最便捷”的双臂机器人真机数据集RoboCOIN,覆盖15类机器人、18万条轨迹、421项任务,首创“层级能力金字塔”标注体系,推动具身智能迈向真实场景应用。
727 11
 智源RoboCOIN重磅开源!全球本体数最多、标注最精细、使用最便捷的高质量双臂机器人真机数据集来了
|
3月前
|
机器学习/深度学习 编解码 JSON
FantasyWorld 正式开源!一次前向传播,同时生成视频与 3D 几何——视频世界模型的新范
高德地图发布「FantasyWorld」——新一代几何一致世界模型,单次前向即可生成高质量视频与3D场景(深度图、点云、相机轨迹),无需后处理或逐场景优化。ICLR 2026录用,WorldScore榜首,已开源代码与模型。
776 6
|
3月前
|
人工智能 自然语言处理 安全
2026年新手零门槛解锁OpenClaw/Clawdbot部署+WhatsApp接入教程指南
在AI自动化工具全面普及的2026年,OpenClaw(原Clawdbot、Moltbot)凭借“自然语言指令驱动+全场景任务自动执行”的核心优势,成为个人、跨境从业者及轻量团队的必备智能助手——它无需专业编程基础,无需手动配置复杂运行环境,就能轻松实现文件管理、联网搜索、跨境信息同步、批量消息推送等多元化操作,完美适配WhatsApp的高频使用场景。而阿里云推出的OpenClaw一键部署方案,依托云端基础设施的稳定性与自动化部署能力,预置专属优化镜像、整合所有核心依赖,彻底打破了新手的技术门槛,哪怕你完全不懂服务器、不懂代码,跟着步骤15-20分钟就能完成部署,部署后通过简单配置即可快速接入
635 2
|
4月前
|
人工智能 运维 API
从 Coze API 到智能体系统落地:AI 智能体运营工程师的工程实践解析
在AI 2.0时代,Coze API推动智能体从技术走向生产力。本文聚焦西南实践,解析API调用到商业落地的全流程,揭秘“智能体来了”如何通过插件集成、工作流编排培养具备运营思维的AI工程师,助力开发者转型,抢占智能体时代新机遇。
278 11
|
4月前
|
数据采集 人工智能 自然语言处理
AI成熟度不够,别说你在搞智能
90%的AI项目都失败了?问题不在技术,在于你的组织根本没准备好!MITRE推出的AI成熟度模型告诉你,为什么有些公司AI用得风生水起,有些却血本无归。从门外汉到AI大神,六大支柱、五个等级,让你的AI转型不再踩坑! #人工智能 #数字化转型 #企业管理 #技术战略
280 3
|
5月前
|
JSON 自然语言处理 Docker
安装ES、Kibana、IK
本文介绍如何通过Docker部署单节点Elasticsearch与Kibana,并配置IK分词器。包括创建网络、加载镜像、运行容器、安装IK插件、扩展词典与停用词配置等步骤,助力搭建中文分词环境,提升搜索准确性。
|
云安全 弹性计算 安全
阿里云服务器安全攻略参考:基础防护与云安全产品简介
在使用云服务器的过程中,云服务器的安全问题是很多用户非常关心的问题,阿里云服务器除了提供基础的防护之外,我们也可以选择其他的云安全类产品来确保我们云服务器的安全。本文为您介绍阿里云服务器的基础安全防护机制,以及阿里云提供的各类云安全产品,帮助用户全面了解并选择合适的防护手段,为云上业务保驾护航。
1552 11