Java实体映射工具MapStruct详解

在软件架构中,分层式结构是最常见,各层之间有其独立且隔离的业务逻辑,也因而各层有自己的输入输出对象,也就是代码中见到各种对象,如DO(Data Object)、DTO、Domain Entity(领域实体),这些数据对象之间通常都有很多相同或相近的属性对象,数据在传输的过程中从一个对象到另一个对象,就通常需要赋值,从最初的的getter/setter到后来的BeanUtils(减少了setter的代码量),再到现在的MapStruct。
目前的转换器有很多种,根据网上的性能压测数据来看,JMapper 和 MapStruct 的性能最好;根据易用性来讲 MapStruct 最好,所以我们就使用 MapStruct 来实现转换器。

 

专栏大纲
在软件架构中,分层架构是最常见,各层之间有其独立且隔离的业务逻辑,也因而各层有自己的输入输出对象,也就是代码中见到各种对象,如DO(Data Object)、DTO、Domain Entity(领域实体),这些数据对象之间通常都有很多相同或相近的属性对象,数据在传输的过程中从一个对象到另一个对象,就通常需要赋值,从最初的的getter/setter到后来的BeanUtils(减少了setter的代码量),再到现在的MapStruct。
手写转换器带来的人工成本较高,尤其是当转换对象属性较多,或者有嵌套属性时,费时费力,且容易遗漏出错,而且随着对象的迭代,转换器中的代码也要变动,所以通常我们还是会采用自动化的转换器。
在自动化的转换器中,从性能和易用性来说,MapStruct都是其中的佼佼者。本技术专栏将详细介绍Java 实体映射工具 MapStruct的使用。
主要包含如下内容:
  • Java 实体映射工具 MapStruct概览和环境设置
  • Java 实体映射工具 MapStruct-基本映射快速入门
  • 在Intellij IDEA中体验MapStruct Support插件
  • Java 实体映射工具 MapStruct-定制映射
  • Java 实体映射工具 MapStruct-映射多个对象
  • Java 实体映射工具 MapStruct-映射嵌套对象
  • Java 实体映射工具 MapStruct-List的转换
  • Java实体映射工具MapStruct-封装BaseMapper接口
  • 为什么实体映射工具MapStruct 的效率比较高?
  • 数据类型转换(numberFormat、dateFormat、expression)
  • Java实体映射工具MapStruct和Lombok开发利器结合使用
  • MapStruct使用Java表达式进行映射
  • MapStruct属性映射设置常量、默认值或默认表达式
  • Java实体映射工具MapStruct-集合映射Map和Set
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MapStruct是一个Java注解处理器,可以帮助开发者快速生成Java Bean之间的映射代码。通过注解和代码生成,MapStruct能够自动映射两个Java Bean之间的属性。 下面是一个使用MapStruct的示例: 首先,在Maven项目中添加以下依赖: ```xml <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct</artifactId> <version>1.4.2.Final</version> </dependency> <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-processor</artifactId> <version>1.4.2.Final</version> <scope>provided</scope> </dependency> ``` 然后,我们需要定义两个Java Bean类,例如: ```java public class SourceBean { private String name; private int age; // getter and setter } public class TargetBean { private String name; private int age; // getter and setter } ``` 接下来,我们需要定义一个Mapper接口,用于映射两个Java Bean之间的属性。例如: ```java @Mapper public interface MyMapper { MyMapper INSTANCE = Mappers.getMapper(MyMapper.class); TargetBean sourceToTarget(SourceBean sourceBean); } ``` 在这个接口中,我们使用了MapStruct提供的@Mapper注解,表示这个接口是一个Mapper接口。同时,我们还定义了一个静态的INSTANCE实例,并使用了Mappers.getMapper方法来获取该实例。 接着,我们在这个接口中定义了一个sourceToTarget方法,用于将SourceBean映射到TargetBean。在这个方法中,我们只需要编写一个简单的映射规则即可,例如: ```java @Mapping(source = "name", target = "name") @Mapping(source = "age", target = "age") TargetBean sourceToTarget(SourceBean sourceBean); ``` 在这个方法中,我们使用了MapStruct提供的@Mapping注解,指定了SourceBean和TargetBean中属性之间的映射关系。例如,source = "name"表示SourceBean中的name属性映射到TargetBean中的name属性。 最后,在我们的代码中,我们可以使用MyMapper.INSTANCE.sourceToTarget方法来将SourceBean转换为TargetBean,例如: ```java SourceBean sourceBean = new SourceBean(); sourceBean.setName("张三"); sourceBean.setAge(18); TargetBean targetBean = MyMapper.INSTANCE.sourceToTarget(sourceBean); System.out.println(targetBean.getName()); // 输出:张三 System.out.println(targetBean.getAge()); // 输出:18 ``` 这样,我们就完成了两个Java Bean之间的属性映射。使用MapStruct能够让我们的代码更加简洁和可维护,特别是在处理复杂的Java Bean之间的映射时,MapStruct能够大大提高我们的开发效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值