MapStruct 是什么?
一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 - 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/
截止目前, 星球 内专栏累计输出 72w+ 字,讲解图 3103+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2400+ 小伙伴加入学习 ,欢迎点击围观
前言
在后端开发中,经常需要将一个对象的数据映射到另一个对象上,如将 DO 对象(数据库层)转换成 DTO 对象(数据传输对象)。如果纯手动 new
对象,一个属性一个属性的 set
,如果字段非常多,就显得非常繁琐,又臭又长,可维护性和可读性都非常差。于是,开发人员常常会使用一些对象映射框架。
什么是 MapStruct ?
MapStruct 是一个流行且强大的 Java 对象映射框架,它能够自动生成类型安全的映射代码,减少手动编写重复的映射逻辑。 仅需通过简单的注解和声明,它会为您在编译期间自动生成映射代码,从而提高代码质量、减少出错的可能性,并节省开发时间。
主要特性
- 类型安全:生成的映射代码是类型安全的。任何源和目标属性之间的不匹配都会在编译时被检测到。
- 性能:性能最强的对象映射工具,不接受反驳。MapStruct 使用普通的方法调用进行映射,这意味着它的速度与手写的映射代码相似,没有反射的开销。
- 简洁性:不需要为每个属性编写冗长的复制代码。一旦定义了映射器接口和必要的注解,MapStruct 会为您做其余的工作。
- 可定制性:虽然大部分的映射可以自动完成,但 MapStruct 也提供了多种方式来自定义特定的映射行为。
- 易于集成:MapStruct 不需要额外的运行时库,只需要在构建过程中添加依赖即可。它与 Spring 等常用框架很好地集成,不会引入额外的复杂性。
- 简洁的 API 和注解: MapStruct 的 API 和注解都非常直观,这使得学习和使用它变得简单。此外,由于它只使用注解来定义映射,因此不需要额外的 XML 或配置文件。
- 支持不可变对象和构建器模式:MapStruct 支持映射到不可变对象,以及那些使用了构建器模式的对象,这使其适应现代 Java 开发中的多种设计模式。
- 持续的社区支持:MapStruct 有一个积极的开发者社区,这确保了持续的改进、新功能的添加以及问题的及时解决。
如何使用?
MapStruct 通过处理自定义注解来工作。您只需要定义一个接口,并使用 @Mapper
注解来标注它。在这个接口中,为每个转换定义一个方法,MapStruct 将会为您生成该接口的实现类,包含了所有必要的映射代码。
例如:
@Mapper
public interface CarMapper {
CarDto carToCarDto(Car car);
}
在上述示例中,CarMapper
是一个接口,定义了如何将 Car
对象映射到 CarDto
对象。MapStruct 将自动生成此接口的实现,并为 Car
和 CarDto
之间的每个具有相同名称和类型的属性生成映射代码。
总结
MapStruct 提供了一种简洁、类型安全且高效的方式来转换 Java 对象。它的目标是简化对象映射的工作,使开发者能够专注于主要的业务逻辑,而不是反复编写样板代码。