使用 DemoUtils 类进行复杂映射操作。MapStruct 通过提供高效、自动化的数据转换能力,简化了实体间的赋值操作,提高了开发效率和代码可读性。它是 Java 开发者进行实体映射时不可或缺的工具。
Java 实体映射工具 MapStruct
Java 实体映射工具 MapStruct
MapStruct 是一个强大的实体映射工具,它能够自动为业务实体对象(DO)和数据传输对象(DTO)提供数据转换。在软件架构中,各层之间有独立的业务逻辑和输入输出对象,如 DO、DTO、VO。数据对象之间通常有相似的属性,数据传输过程中需要赋值。早期的 get/set 方法和后来的 BeanUtils(减少了 set 的代码量)都曾是数据转换的常见方式。而 MapStruct 通过在编译期生成调用 get/set 方法的代码,提供高性能的赋值操作。
MapStruct 的使用非常简便,只需引入对应的 jar 包。在使用时,通常定义一个接口,并在 service 或 domainService 下创建一个 converter 包。通过依赖注入的方式获取 Mapper 实例。
MapStruct 支持多种数据转换场景:
1. 对于同名同属性的字段,无需特别声明,自动转换。例如:
MapStructReq1:
MapStructResp1:
示例代码:
serviceImpl:
controller:
调用 demo1 接口后,可以看到 MapStructReq1 数据成功拷贝到 MapStructResp1 中返回。
2. 对于不同名相同属性的字段,可以使用 Mapping 注解指定转换规则。例如:
MapStructReq1:
MapStructResp2
示例代码:
controller:
req1 中的 name 字段成功映射到 resp2 的 productName 中。
3. 支持多个参数映射成一个类型,使用 @Mapping 指定。例如:
示例代码:
将 req1 的 id 和 req2 的 name 成功映射到 resp1 中。
4. 对于基础数据类型的自动转换,如 int、long、String 和 Integer、Long。例如:
示例代码:
String 类型的 id 转为 int 类型,int 类型的 name 转为 String 类型。
5. 支持集合类型的拷贝,例如:
示例代码:
将 req5 中的集合数据成功拷贝到 resp5 中。
6. 嵌套对象的拷贝,例如:
示例代码:
将 req1 赋值给 target 对象,同时将多个 req1 对象赋值给 list 集合。
7. 使用 Java 表达式进行复杂映射,允许在转换过程中使用 Java 表达式实现字段映射,例如:
示例代码:
使用 DemoUtils 类进行复杂映射操作。
MapStruct 通过提供高效、自动化的数据转换能力,简化了实体间的赋值操作,提高了开发效率和代码可读性。它是 Java 开发者进行实体映射时不可或缺的工具。2024-11-25