1. 概述
MapStruct是一个用于Java Bean之间映射的代码生成器,它可以帮助我们在不同类型的Java对象之间进行转换,而无需手动编写转换代码。MapStruct能够自动生成类型安全的转换代码,减少了手动编写的工作量,提高了代码的可维护性。
2. 用途
MapStruct主要用于以下场景:
- DTO与Entity转换:在分层架构中,DTO(数据传输对象)用于服务层与客户端之间的数据交换,而Entity则是持久层的数据模型。MapStruct能够自动将Entity转换为DTO,或将DTO转换为Entity,从而简化了数据交换的过程。
- ViewModel与Model转换:在Web开发中,ViewModel通常用于前端展示,而Model则是后端的数据模型。MapStruct可以方便地将Model转换为ViewModel,或进行反向转换。
- 任意Java Bean之间的转换:MapStruct不仅限于上述场景,它还可以用于任意Java Bean之间的转换,只要这些Bean的字段之间存在映射关系。
3. 常用方法
- @Mapper:标记一个接口为MapStruct的映射器接口。可以通过componentModel属性指定生成的实现类的类型(如Spring的组件)。
- @Mapping:定义字段之间的映射关系。可以指定source(源字段)、target(目标字段)以及expression(表达式)等属性。
- @Mappings:包含多个@Mapping注解,用于定义多个字段的映射关系。
- @IterableMapping:用于定义集合类型的映射关系。
- @BeanMapping:用于定义整个Bean的映射关系,可以包含ignoreUnmappedSourceProperties、ignoreUnmappedTargetProperties等属性。
4. 参数说明
- source:指定源对象的字段名。
- target:指定目标对象的字段名。
- expression:用于定义字段映射的表达式,可以是Java方法调用、字符串连接等。
- ignore:当设置为true时,忽略源字段的映射。
- nullValueCheckStrategy:定义空值检查的策略。
5. 示例代码
假设有两个简单的Java Bean:Car和CarDto。
依赖
<dependency>
<groupId