技术博客
惊喜好礼享不停
技术博客
Spring Boot中使用MapStruct与Lombok简化DTO转换代码的实践指南

Spring Boot中使用MapStruct与Lombok简化DTO转换代码的实践指南

作者: 万维易源
2026-01-19
SpringMapStructLombokDTO转换代码简化

摘要

在Spring Boot项目开发中,Entity、DTO与VO之间的手动转换常导致代码冗余且易出错。为提升开发效率与代码可维护性,文章探讨了结合MapStruct与Lombok两大工具实现自动映射的解决方案。MapStruct通过编译时生成类型安全的转换代码,显著减少样板代码;Lombok则进一步消除getter、setter、toString等冗余方法。二者协同工作,使开发者能更聚焦于核心业务逻辑,有效提升编码效率与项目质量。

关键词

Spring, MapStruct, Lombok, DTO转换, 代码简化

一、技术背景与引入价值

1.1 传统手动转换DTO的痛点与挑战

在Spring Boot项目的开发过程中,Entity、DTO与VO之间的数据转换是不可避免的环节。然而,长期以来开发者依赖手动编写映射代码,这种方式不仅繁琐冗长,还极易引入人为错误。每一个字段的赋值都需要逐一对应,当对象结构复杂或字段数量庞大时,代码量呈指数级增长,严重影响开发效率。更为严重的是,一旦实体类发生变更,所有相关的转换逻辑都需同步修改,维护成本极高。这种重复性的体力劳动让开发者难以专注于真正的业务逻辑实现,违背了高效编程的初衷。尤其是在大型项目中,频繁的手动映射操作已成为制约迭代速度和技术体验的关键瓶颈。

1.2 MapStruct简介及其核心优势

MapStruct作为一种基于注解的Java映射框架,旨在解决上述问题。它通过在编译期自动生成类型安全的映射实现类,实现了Entity、DTO、VO之间的自动转换。与运行时反射机制不同,MapStruct的代码生成发生在编译阶段,既保证了高性能,又具备良好的可调试性。其核心优势在于能够显著减少样板代码,提升代码的可读性和可维护性。开发者只需定义接口并标注相应的映射关系,MapStruct便会自动生成高效的实现类,支持字段名自动匹配、嵌套对象映射以及自定义转换逻辑扩展,极大提升了开发效率。

1.3 Lombok的简化代码能力概述

Lombok作为一款广受欢迎的Java开发辅助工具,通过注解方式自动生常见方法,有效消除了大量冗余代码。在实体类中,诸如getter、setter、toString、equals和hashCode等方法往往占据大量篇幅,而这些代码机械且重复。Lombok通过@Data@Getter@Setter等注解,使得开发者无需手动编写这些方法,编译时即可自动生成。这不仅大幅减少了代码量,也降低了因手写失误带来的潜在bug风险。结合现代IDE的支持,Lombok让Java代码更加简洁清晰,使开发者能将注意力集中于核心逻辑的设计与实现。

1.4 MapStruct与Lombok协同作用的原理分析

MapStruct与Lombok的结合,构成了现代化Spring Boot项目中代码简化的黄金组合。尽管两者均在编译期发挥作用,但其处理顺序需合理协调:Lombok首先生成getter、setter等访问方法,随后MapStruct基于这些已生成的方法进行字段映射代码的构造。只要构建流程配置得当,二者可以无缝协作。这种协同模式不仅避免了手动映射的繁琐,还彻底清除了Java Bean中的样板代码,真正实现了“写少而做多”的编程理念。开发者只需关注对象间的语义映射关系,其余工作均由工具链自动化完成,极大地提升了编码效率与项目整体质量。

二、MapStruct在Spring Boot中的深入应用

2.1 MapStruct在Spring Boot项目中的集成方法

在Spring Boot项目中集成MapStruct,是迈向高效开发的重要一步。首先,需在项目的pom.xml文件中引入MapStruct的核心依赖,包括mapstruct和mapstruct-processor,确保注解处理器能够在编译期正常工作。同时,由于Spring Boot默认不包含MapStruct的支持,开发者还需显式配置Lombok与MapStruct的编译顺序,以保证Lombok生成的getter、setter方法能被MapStruct正确识别。通过在maven-compiler-plugin中指定annotationProcessorPaths,将Lombok与MapStruct的处理器依次注册,便可实现两者的协同运作。此外,Spring容器中Bean的注入需求也要求在MapStruct映射接口上添加@Mapper注解,并设置componentModel="spring",从而使生成的实现类自动注册为Spring管理的Bean,无缝融入Spring生态体系。

2.2 MapStruct常用注解与配置详解

MapStruct提供了丰富且直观的注解体系,极大增强了映射逻辑的表达能力。其中,@Mapper是最基础也是最核心的注解,用于标识一个接口为映射接口,触发编译时代码生成。当设置componentModel="spring"时,生成的实现类将以Spring Bean的形式存在,便于在Service层直接注入使用。对于字段名称不一致的情况,@Mapping注解可实现源属性与目标属性的显式绑定,支持dateFormat、numberFormat等格式化选项,满足复杂转换需求。若存在嵌套对象映射,可通过qualifiedByName或@IterableMapping等高级注解进行精细化控制。此外,@MapperConfig可用于定义全局映射策略,统一配置null值处理、字段命名策略等行为,提升代码一致性与可维护性。

2.3 MapStruct自定义映射策略与技巧

尽管MapStruct支持大多数常规字段的自动映射,但在面对特殊业务场景时,仍需借助自定义映射策略来扩展其能力。例如,当源对象与目标对象之间存在逻辑计算或状态转换时,开发者可在映射接口中定义默认方法或私有方法,结合@Named注解进行引用,实现灵活的转换逻辑。对于枚举类型的映射,可通过编写专用的转换方法并标注@AfterMapping或@BeforeMapping,在映射前后执行额外操作。另一种常见技巧是使用ObjectFactory来自定义目标对象的实例化过程,适用于构造函数参数复杂的VO或DTO。通过这些高级技巧,MapStruct不仅能应对简单字段复制,更能胜任复杂的业务模型转换任务,真正实现从“能用”到“好用”的跨越。

2.4 MapStruct与Spring Boot的完美结合实例

在一个典型的Spring Boot应用中,假设存在UserEntity实体类与UserDTO数据传输对象,两者间包含多数同名字段及个别差异字段。通过定义UserMapper接口并标注@Mapper(componentModel = "spring"),开发者无需编写任何实现类,仅需声明UserDTO toDto(UserEntity entity); 方法,MapStruct便会在编译时自动生成高效实现。结合Lombok在UserEntity和UserDTO上使用@Data注解,彻底消除getter/setter代码。在Service层中,通过@Autowired注入UserMapper实例,即可完成实体到DTO的快速转换。整个过程无需反射、无运行时性能损耗,且类型安全、易于调试。这种简洁而强大的组合,正是现代Java开发追求极致效率的真实体现。

三、Lombok核心功能与最佳实践

3.1 Lombok在Spring Boot项目中的集成方式

在Spring Boot项目中引入Lombok,是迈向简洁代码的第一步。开发者只需在项目的pom.xml文件中添加Lombok的依赖项,即可启用其强大功能。由于Lombok通过注解处理器在编译期自动生成代码,因此无需额外配置复杂的插件或干预构建流程。现代主流构建工具如Maven和Gradle均能无缝支持Lombok的集成。更重要的是,在与MapStruct协同工作的场景下,需确保编译器正确识别注解处理顺序——Lombok必须优先生成getter、setter等访问方法,以便MapStruct在后续阶段基于这些方法进行字段映射。只要IDE和构建环境正确安装了Lombok插件,并启用了注解处理功能,整个集成过程便能顺利推进,为项目带来立竿见影的代码精简效果。

3.2 Lombok常用注解及其功能解析

Lombok提供了多种注解来替代Java中常见的冗余代码结构。`@Data`注解是最常用的复合型注解之一,它自动为类生成getter、setter、toString、equals和hashCode方法,极大简化了POJO类的定义。对于需要更细粒度控制的场景,开发者可选用`@Getter`和`@Setter`单独开启对应方法的生成;`@ToString`用于定制对象字符串表示形式;`@EqualsAndHashCode`则精准控制比较逻辑。此外,`@NoArgsConstructor`、`@AllArgsConstructor`和`@RequiredArgsConstructor`可分别生成不同参数类型的构造函数,满足各种初始化需求。这些注解不仅提升了代码可读性,也让开发者摆脱了机械编码的束缚,真正将精力投入到业务逻辑的设计与优化之中。

3.3 Lombok减少样板代码的实际效果

引入Lombok后,实体类中的代码量显著下降。以一个包含十个字段的UserEntity为例,若手动编写getter、setter、toString、equals和hashCode方法,通常需要超过200行代码。而使用`@Data`注解后,整个类可压缩至仅十余行,结构清晰且易于维护。这种缩减不仅仅是行数上的胜利,更是开发心理层面的解放——当不再被重复的模板代码缠绕,思维更容易聚焦于领域模型的本质。尤其在大型系统中,成百上千个实体类累计节省的代码行数可达数万行,极大地提升了项目的可读性与长期可维护性。Lombok所带来的不仅是效率提升,更是一种对优雅编程的追求。

3.4 Lombok与IDE的完整兼容性处理

Lombok的正常运行依赖于IDE对其注解处理器的支持。主流开发工具如IntelliJ IDEA、Eclipse和VS Code均需预先安装Lombok插件,并在设置中启用注解处理功能,否则会出现“找不到getter/setter”等编译错误提示。在IntelliJ IDEA中,还需开启“Enable annotation processing”选项,确保编译期间能正确生成代码。一旦配置完成,IDE不仅能识别Lombok生成的方法,还能提供自动补全、跳转定义和重构支持,用户体验几乎与手写代码无异。这种深度兼容性保障了团队协作中的开发一致性,使得Lombok成为现代Java项目中不可或缺的生产力工具。

四、MapStruct与Lombok的协同工作流程

4.1 MapStruct与Lombok结合使用的配置步骤

在Spring Boot项目中实现MapStruct与Lombok的无缝协作,关键在于正确的依赖引入与编译器配置。首先,需在pom.xml中添加mapstruct和mapstruct-processor依赖,并确保Lombok依赖已存在。随后,在maven-compiler-plugin中明确指定annotationProcessorPaths,将Lombok与MapStruct的注解处理器按顺序注册,确保Lombok优先生成getter、setter等方法,供MapStruct在编译期读取并生成映射代码。同时,必须在MapStruct的@Mapper注解中设置componentModel="spring",使生成的实现类自动注册为Spring Bean,便于在Service层通过@Autowired注入使用。只有当构建流程精准协调两者处理顺序时,才能避免“无法找到字段访问方法”等编译错误,真正发挥出“注解驱动、代码自生”的开发红利。

4.2 DTO转换类的设计与实现策略

设计高效的DTO转换类,应遵循职责单一与语义清晰的原则。在Spring Boot项目中,Entity、DTO与VO之间的映射接口应独立定义,避免混杂业务逻辑。通过@Mapper接口声明转换方法,如UserDTO toDto(UserEntity entity),MapStruct将在编译期自动生成实现类。对于字段名不一致的情况,使用@Mapping注解进行显式绑定;嵌套对象则可通过@NestedTarget或自定义转换方法处理。结合Lombok的@Data注解,DTO类无需编写getter、setter,保持极简结构。此外,建议为复杂映射建立专用Mapper接口,并利用@MapperConfig统一null值处理策略,提升代码一致性与可维护性,让转换逻辑既透明又可控。

4.3 自动生成的转换代码优化方法

MapStruct生成的转换代码本身已具备高性能与类型安全性,但仍可通过策略进一步优化。首先,合理使用@Named与@AfterMapping/@BeforeMapping注解,针对特殊字段编写自定义转换逻辑,避免在业务层重复处理。其次,对于频繁使用的全局映射规则,可通过@MapperConfig定义默认行为,如日期格式化、空值跳过等,减少重复配置。此外,启用MapStruct的uses属性引入外部转换器(如枚举转换服务),可增强扩展性。结合Lombok消除冗余方法后,整个转换链路干净整洁,不仅提升了可读性,也降低了维护成本,真正实现“一次定义,终身受益”的自动化映射机制。

4.4 避免常见陷阱与问题的解决方案

在使用MapStruct与Lombok过程中,常见问题多源于配置不当或理解偏差。例如,若未正确设置annotationProcessorPaths,可能导致MapStruct无法识别Lombok生成的方法,引发编译失败。此时应检查maven-compiler-plugin配置,确保处理器顺序正确。另一个典型问题是IDE无法识别Lombok注解生成的方法,表现为“cannot resolve symbol”错误,这通常是因未安装或启用Lombok插件所致。开发者需在IntelliJ IDEA等工具中安装官方插件,并开启“Enable annotation processing”选项。此外,当MapStruct映射失败时,应查看生成的实现类源码(位于target/classes)定位问题,而非仅依赖接口定义。通过严谨的配置与充分的环境准备,绝大多数问题均可预防和快速解决。

五、DTO转换的高级技巧与优化

5.1 实体类、DTO、VO的设计原则

在Spring Boot项目中,实体类(Entity)、数据传输对象(DTO)与视图对象(VO)的合理设计是保障系统清晰结构与高可维护性的基石。Entity作为持久层的核心,应忠实反映数据库表结构,承载业务领域的核心状态与行为;DTO则专注于服务间或前后端的数据交互,需精简冗余字段,仅暴露必要信息,防止敏感数据泄露;VO更进一步面向前端展示需求,强调数据的可读性与聚合性,常包含格式化后的文本或组合字段。三者虽职责各异,但共同遵循“高内聚、低耦合”的设计哲学。借助Lombok的`@Data`注解,这些类得以摆脱繁琐的getter、setter、toString等样板代码,使开发者能将注意力集中在字段语义与业务含义的准确表达上。而MapStruct的存在,则让它们之间的转换变得自然流畅——只需定义清晰的映射接口,编译期即可生成高效、类型安全的实现代码。这种“契约先行、注解驱动”的模式,不仅提升了代码的整洁度,也强化了团队协作中的规范一致性。

5.2 转换规则的标准化与规范化

当Entity、DTO与VO之间的映射关系日益复杂时,缺乏统一标准的转换逻辑将成为技术债务的温床。为此,MapStruct提供了强有力的支撑机制,推动转换规则走向标准化。通过`@MapperConfig`注解定义全局映射配置,可统一处理null值策略、日期格式(如dateFormat = "yyyy-MM-dd")、字段命名转换(如驼峰转下划线)等通用行为,避免在每个映射方法中重复声明。对于字段名不一致的情况,使用`@Mapping`注解进行显式绑定,确保语义连贯;而对于嵌套对象或集合类型,可通过`@IterableMapping`或`qualifiedByName`实现精细化控制。结合Lombok生成的标准访问方法,MapStruct能在编译期精准识别属性路径,杜绝运行时反射带来的不确定性。更重要的是,所有转换逻辑集中于专用的Mapper接口中,形成清晰的技术契约,便于审查、测试与演进,真正实现“一处定义、处处生效”的规范化管理。

5.3 边界情况的处理策略

在实际开发中,数据转换并非总是理想状态下的字段直连,边界情况的妥善处理决定了系统的健壮性。例如,当源对象中的某个字段为null时,默认映射可能无法满足业务预期,此时可通过MapStruct的`nullValuePropertyMappingStrategy`配置指定跳过或设为默认值的行为。对于枚举类型的转换,若遇到未知枚举值,应设计兜底逻辑,如映射为UNKNOWN状态或抛出自定义异常,避免程序崩溃。此外,当目标对象含有计算字段或需拼接多个源字段时,可结合`@AfterMapping`注解编写补充逻辑,在主映射完成后自动填充衍生值。对于List或Set等集合类型,还需考虑空集合与null的区分处理,防止下游消费方出现NPE。这些细节虽小,却深刻影响着系统的稳定性与用户体验,唯有在设计之初就纳入考量,才能构筑真正可靠的转换链条。

5.4 性能优化与内存管理技巧

尽管MapStruct基于编译时代码生成,避免了运行时反射的性能损耗,但在大规模数据转换场景下,仍需关注潜在的性能瓶颈与内存占用问题。首先,应避免在Mapper接口中定义过于庞大的转换方法,尤其是涉及深层嵌套对象或多层级集合映射时,建议拆分为多个细粒度的映射单元,提升可读性与复用性。其次,合理使用`@Context`传递上下文参数,可在复杂转换中共享缓存或服务实例,减少重复查询开销。对于高频调用的转换操作,可结合Spring的缓存机制对结果进行适度缓存,减轻CPU压力。同时,Lombok生成的`toString`方法若包含深层关联对象,可能引发意外的对象加载或栈溢出,应在`@ToString`中通过exclude排除循环引用字段。最终,通过编译后查看`target/classes`中生成的实现类,可直观评估代码质量与执行路径,确保每一行自动代码都服务于高效与稳定的目标。

六、实际项目中的综合应用案例

6.1 在复杂业务场景下的转换应用

在面对复杂业务逻辑时,Entity、DTO与VO之间的映射往往不再局限于简单的字段拷贝,而是涉及多重条件判断、状态转换与业务规则嵌入。MapStruct的强大之处在于其不仅支持基础的属性映射,更可通过自定义方法与生命周期回调机制,灵活应对这些高阶需求。例如,当订单状态需根据多个源字段综合计算得出时,开发者可在Mapper接口中定义带有`@AfterMapping`注解的方法,在主映射完成后自动填充目标对象的状态字段。对于跨系统交互中的枚举不一致问题,可结合`@Named`与`qualifiedByName`实现精确匹配策略,确保语义一致性。与此同时,Lombok通过`@Data`和`@Builder`为复杂对象提供简洁构造方式,使测试数据准备更加高效。二者协同下,即便在审批流、风控引擎等高度定制化的场景中,也能实现清晰、可维护且类型安全的转换逻辑,真正让自动化工具服务于复杂现实。

6.2 批量数据转换的高效实现

当系统需要处理大批量数据的转换任务时,如分页查询结果集映射或报表导出场景,性能与内存消耗成为关键考量因素。MapStruct在编译期生成的转换代码具有接近手写代码的执行效率,避免了反射带来的运行时开销,为批量处理提供了坚实基础。通过将单个对象的映射逻辑封装在类型安全的Mapper接口中,开发者可轻松结合Java Stream API实现集合级别的转换操作,如`list.stream().map(userMapper::toDto).collect(Collectors.toList())`,代码简洁且易于并行化优化。此外,配合Lombok生成的高效`equals`与`hashCode`方法,还可支持去重、缓存等附加处理。值得注意的是,为防止大规模转换引发GC压力,建议采用分批映射与流式处理相结合的方式,控制每次转换的数据量,从而在吞吐量与资源占用之间取得平衡。

6.3 多源数据整合的转换方案

在微服务架构或异构系统对接中,常需将来自不同服务或数据库的多个源对象合并为一个统一的DTO进行展示或传输。MapStruct支持多参数映射方法,允许在一个映射接口中定义接收多个源对象的转换方法,如`TargetVO combine(SourceA a, SourceB b)`,并在方法体内自动组合字段。对于字段冲突或语义重叠的情况,可通过`@Mapping`明确指定优先级与转换规则。若存在共通的整合逻辑,还可借助`@MapperConfig`定义全局策略,提升一致性。结合Lombok对目标VO使用`@Data`注解,可最大限度减少模板代码,使整合后的对象结构清晰、易于维护。这种以契约为核心的整合模式,不仅提高了开发效率,也为后期扩展预留了良好接口,是应对系统间数据融合的理想选择。

6.4 历史遗留代码的渐进式改造方法

在已有项目中引入MapStruct与Lombok进行DTO转换优化时,往往面临大量历史手写映射代码的迁移挑战。直接全面替换风险较高,宜采取渐进式改造策略。首先,可在新增模块中全面启用MapStruct与Lombok,建立新的编码规范;随后,针对高频调用或频繁变更的旧有转换逻辑,逐步重构为MapStruct映射接口,并通过单元测试验证行为一致性。在此过程中,可利用MapStruct的`uses`属性保留原有工具类中的特殊转换方法,实现平滑过渡。同时,Lombok的引入应伴随IDE插件的统一配置,避免团队成员因环境差异出现编译或识别问题。通过分阶段、按模块推进的方式,既能控制改造风险,又能持续释放自动化映射带来的效率红利,最终实现整体代码质量的稳步提升。

七、技术评估与未来展望

7.1 MapStruct与Lombok的性能评估

在Spring Boot项目中,MapStruct与Lombok的结合不仅带来了代码层面的极大简化,更在性能表现上展现出显著优势。MapStruct通过编译时生成类型安全的映射代码,完全规避了运行时反射机制所带来的性能损耗,其生成的转换逻辑接近手写代码的执行效率,尤其在高频调用和大数据量场景下优势尤为突出。相比基于反射的BeanUtils或Dozer等传统工具,MapStruct避免了方法查找、字段访问校验等开销,使得对象转换过程更加轻量高效。与此同时,Lombok通过注解处理器在编译期自动插入getter、setter、toString等方法,消除了冗余代码的同时,也减少了类文件的加载负担和JVM字节码解释执行的压力。二者协同工作,既提升了开发效率,又保障了应用运行时的稳定性与响应速度。特别是在批量数据处理、微服务间数据传输等对性能敏感的场景中,这种“零运行时代价”的设计理念,真正实现了从代码优雅到系统高效的无缝衔接。

7.2 替代工具对比分析

在Java生态中,尽管存在多种对象映射解决方案,但MapStruct相较于Dozer、Orika、ModelMapper等基于运行时反射的框架,具备明显的技术优势。后者虽然使用简单,但在每次转换时都需要通过反射解析字段和调用setter方法,导致较高的CPU消耗和延迟,尤其在高并发环境下性能急剧下降。而MapStruct在编译期完成所有映射逻辑的代码生成,运行时仅为普通方法调用,无额外开销,调试友好且易于追踪。相比之下,Lombok的功能定位虽不同于上述映射工具,但其与MapStruct形成互补:它解决了Java POJO类中样板代码泛滥的问题,而MapStruct则专注于跨对象的数据搬运。其他如Project Lombok的竞争对手Delombok仅提供反编译支持,并不具备同等自动化能力。因此,在现代Spring Boot项目中,MapStruct与Lombok的组合已成为事实上的标准配置,远胜于传统手动映射或其他反射驱动方案。

7.3 技术选型的考量因素

在实际项目中引入MapStruct与Lombok,需综合考虑多个技术与团队维度的因素。首先是构建流程的兼容性——必须确保编译器正确配置annotationProcessorPaths,使Lombok优先生成访问方法,供MapStruct在后续阶段使用,否则将引发“无法找到字段”等编译错误。其次是团队成员的技术接受度与IDE环境统一性,所有开发者均需安装Lombok插件并启用注解处理功能,以避免因环境差异导致的识别问题。此外,项目的长期可维护性也是重要考量点:MapStruct生成的代码清晰可见于target目录,便于审查与调试,符合企业级开发对透明性和可控性的要求。对于安全性敏感的系统,由于MapStruct不依赖反射,减少了潜在的安全漏洞风险。最后,还需评估与现有架构的集成成本,尤其是在使用复杂继承结构、泛型嵌套或多模块项目时,是否能良好支持。只有在这些因素均得到妥善规划的前提下,MapStruct与Lombok的引入才能真正释放其技术红利。

7.4 未来发展趋势与新技术展望

随着Java语言不断演进,特别是Record类的引入和Pattern Matching的逐步完善,未来对象映射的需求将趋向更简洁、更声明式的表达方式。MapStruct已开始支持Java 14+的新特性,能够直接映射Record类型,预示其将持续紧跟JDK发展步伐。未来版本有望进一步深化对不可变对象、密封类(Sealed Classes)和模式匹配语法的支持,提升在函数式编程与领域驱动设计中的适用性。Lombok也在积极适配新语言特性,力求在保持注解简洁的同时,兼容Record与instanceof的增强语法。此外,随着AOT(提前编译)和GraalVM原生镜像的普及,编译期代码生成的优势将进一步放大,MapStruct与Lombok的“静态生成”模式将成为构建高性能微服务的理想选择。长远来看,这类基于契约与注解驱动的自动化工具,或将与AI辅助编程深度融合,实现从接口定义到映射逻辑的智能推导,真正迈向“低代码、高可靠”的下一代Java开发范式。

八、总结

本文系统探讨了在Spring Boot项目中结合MapStruct与Lombok实现Entity、DTO与VO之间自动转换的技术方案。通过分析传统手动映射的痛点,阐述了MapStruct在编译期生成类型安全映射代码的优势,以及Lombok消除getter、setter等冗余方法的能力。二者协同工作,不仅显著减少了样板代码,提升了开发效率,还增强了代码的可维护性与可读性。文章详细介绍了集成配置、常用注解、自定义策略及常见问题解决方案,并结合实际应用场景展示了批量转换、多源整合与历史代码改造的可行性。性能评估表明,该组合避免了运行时反射开销,优于Dozer、ModelMapper等传统工具。随着Java语言的发展,MapStruct与Lombok将持续适配新特性,成为现代化Java开发中不可或缺的技术实践。

参考文献

  1. 查询的星座名称