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

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

MapStruct,降低无用代码的神器

image.pngimage.png作者:王子林(寥天) 出品:大淘宝技术

 

 

在学习《告别BeanUtils,Mapstruct从入门到精通》后,我发觉MapStruct确实是一个提升系统性能,降低无用 代码的神器。然而,在实践这篇文章过程中,我遇到了些问题,并由此对MapStruct框架有了更深入的理解,以下将我的学习收获分享给大家。

 

本文与《告别BeanUtils,Mapstruct入门到精通》的主要不同之处主要在于: 增加了不同环境下Maven引入的注意事项(见“引入”章)

增加了一对多字段(例如Json字段)互转的代码(见“高级转换”第一节) 增加了子类字段互转的代码(见“高级转换”第二节)

增加了利用Spring进行依赖注入的代码(见“高级转换”第三节)

 

MapStruct是什么?

 

MapStruct is a code generator that greatly simplifies the implementation of mappings between Java bean types based on a convention over configuration approach.——https://mapstruct.org/

 

从官方定义来看,MapStruct类似于我们熟悉的BeanUtils, 是一个Bean的转换框架。

 

In contrast to other mapping frameworks MapStruct generates bean mappings at compile-time which ensures a high performance, allows for fast developer feedback and thorough error checking.—— https://mapstruct.org/

 

他与BeanUtils最大的不同之处在于,其并不是在程序运行过程中通过反射进行字段复制的,而是在编译期生成用于字段复制的代码(类似于Lombok生成get()和set()方法),这种特性使得该框架在运行时相比于BeanUtils有很大的性能提升。

 

引入

Maven

由于MapStruct和Lombok都会在编译期生成代码,如果配置不当,则会产生冲突,因此在工程中同时使用这两个  包时,应该按照以下方案导入:

 

image.png当POM中不包含Lombok时

 

<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>1.5.2.Final</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.5.2.Final</version>
</dependency>


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

相关文章
|
微服务 测试技术 Java
阿里技术专家详解 DDD 系列- Domain Primitive
关于DDD的一系列文章,希望能继续在总结前人的基础上发扬光大DDD的思想,但是通过一套我认为合理的代码结构、框架和约束,来降低DDD的实践门槛,提升代码质量、可测试性、安全性、健壮性。
63028 17
阿里技术专家详解 DDD 系列- Domain Primitive
|
存储 NoSQL Java
Spring Boot统计一个Bean中方法的调用次数
Spring Boot统计一个Bean中方法的调用次数
566 1
|
消息中间件 监控 Java
利用Java构建高效的消息推送系统
利用Java构建高效的消息推送系统
|
数据库 测试技术 Java
阿里技术专家详解DDD系列 第二弹 - 应用架构
应用架构,指软件系统中固定不变的代码结构、设计模式、规范和组件间的通信方式。在应用开发中架构之所以是最重要的第一步,因为一个好的架构能让系统安全、稳定、快速迭代。但是今天我们在做业务研发时,更多会关注一些宏观的架构,而忽略了应用内部的架构设计,希望能通过案例分析和重构,推演出一套高质量的DDD架构。
60109 25
阿里技术专家详解DDD系列 第二弹 - 应用架构
|
Java API UED
【实战秘籍】Spring Boot开发者的福音:掌握网络防抖动,告别无效请求,提升用户体验!
【8月更文挑战第29天】网络防抖动技术能有效处理频繁触发的事件或请求,避免资源浪费,提升系统响应速度与用户体验。本文介绍如何在Spring Boot中实现防抖动,并提供代码示例。通过使用ScheduledExecutorService,可轻松实现延迟执行功能,确保仅在用户停止输入后才触发操作,大幅减少服务器负载。此外,还可利用`@Async`注解简化异步处理逻辑。防抖动是优化应用性能的关键策略,有助于打造高效稳定的软件系统。
373 2
|
数据采集 设计模式 自然语言处理
设计模式最佳套路2 —— 愉快地使用管道模式
管道模式(Pipeline Pattern) 是责任链模式(Chain of Responsibility Pattern)的常用变体之一。在管道模式中,管道扮演着流水线的角色,将数据传递到一个加工处理序列中,数据在每个步骤中被加工处理后,传递到下一个步骤进行加工处理,直到全部步骤处理完毕。 PS:纯的责任链模式在链上只会有一个处理器用于处理数据,而管道模式上多个处理器都会处理数据。
13543 0
设计模式最佳套路2 —— 愉快地使用管道模式
|
前端开发 Java API
网络防抖动在Springboot中有哪些应用?
【6月更文挑战第25天】在 Spring Boot 中,网络防抖动(Debounce)技术可以应用于多种场景,以避免短时间内重复处理相同的请求,提高系统性能和用户体验。
417 8
|
机器学习/深度学习 自然语言处理 算法
大模型Prompt-Tuning技术入门(一)
Prompt-Tuning是NLP领域的新兴技术,旨在减少预训练模型Fine-Tuning的需要。它通过构造提示(Prompt)使预训练模型能适应各种任务,降低了语义偏差和过拟合风险。Prompt作为任务的“提示词”,可以是人工定义、自动搜索或生成的模板,与预训练的MLM头结合使用,只需少量甚至无标注数据,通过标签词映射进行预测。此方法从GPT-3的In-Context Learning发展至今,包括了连续Prompt、大规模模型的Instruction-tuning和Chain-of-Thought等进展。 Prompt-Tuning是向少监督、无监督学习迈进的关键研究。
|
设计模式 消息中间件 Java
Java 设计模式:探索发布-订阅模式的原理与应用
【4月更文挑战第27天】发布-订阅模式是一种消息传递范式,被广泛用于构建松散耦合的系统。在 Java 中,这种模式允许多个对象监听和响应感兴趣的事件。
954 2