MapStruct——一款简单好用的高性能Java Bean映射工具

一、MapStruct是什么?

在Java代码开发中,我们经常会需要进行对象的属性拷贝,常常会用到Spring的BeanUtils,但是也会有遇到相关的性能问题,这里介绍一款高性能的属性拷贝工具------MapStruct。

先放上官网链接,我们先看下官方对MapStruct的介绍和认识。

MapStruct is a code generator that greatly simplifies the implementation of mappings between Java bean types based on a convention over configuration approach. The generated mapping code uses plain method invocations and thus is fast, type-safe and easy to understand.
MapStruct 是一个代码生成器,它基于约定而不是配置方法,极大地简化了 Java Bean 类型之间映射的实现。生成的映射代码使用普通方法调用,因此快速、类型安全且易于理解。

二、为什么要用MapStruct?

前面对MapStruct有了一个简单的认知后,我们再看看官网为什么推荐用到MapStruct工具。

简单来说,就是在多层应用程序通常需要在不同的对象模型(例如实体和 DTO)之间进行映射。编写此类映射代码是一项繁琐且容易出错的任务。MapStruct 旨在通过尽可能地自动化来简化这项工作。

与其他映射框架相比,MapStruct 在编译时生成 Bean 映射,这确保了高性能,允许快速的开发人员反馈和彻底的错误检查。

三、怎么使用MapStruct?

看到这里,此时的你估计有些跃跃欲试了,那么我们怎么去使用MapStruct呢?再次官网也给我们讲述了具体的使用方法。

MapStruct 是一个插入 Java 编译器的注释处理器,可用于命令行构建(Maven、Gradle 等)以及您喜欢的 IDE 中。

MapStruct 使用合理的默认值,但在配置或实现特殊行为时会不顾一切。

四、MapStruct集成步骤

  • 1.SpringBoot项目引入MapStruct依赖,这里用的版本是1.3.0.Final
xml 复制代码
<!-- mapStruct 对象转换 -->  
<dependency>  
    <groupId>org.mapstruct</groupId>  
    <artifactId>mapstruct-jdk8</artifactId>  
    <version>1.3.0.Final</version>  
</dependency>  
<dependency>  
    <groupId>org.mapstruct</groupId>  
    <artifactId>mapstruct-processor</artifactId>  
    <version>1.3.0.Final</version>  
</dependency>
  • 2.准备一个Car类和一个CarDto类
java 复制代码
public class Car {
 
    private String make;
    private int numberOfSeats;
    private CarType type;
 
    //constructor, getters, setters etc.
}
java 复制代码
1.  public class CarDto {
1.   
1.  private String make;
1.  private int seatCount;
1.  private String type;
1.   
1.  //constructor, getters, setters etc.
1.  }
  • 3.创建一个CarMapper接口
java 复制代码
@Mapper
public interface CarMapper {
 
    CarMapper INSTANCE = Mappers.getMapper( CarMapper.class );
 
    @Mapping(source = "numberOfSeats", target = "seatCount")
    CarDto carToCarDto(Car car);
}
  • 4.创建一个MapStruct的测试类,校验映射的结果
Java 复制代码
@Test
public void shouldMapCarToDto() {
    //given
    Car car = new Car( "Morris", 5, CarType.SEDAN );
 
    //when
    CarDto carDto = CarMapper.INSTANCE.carToCarDto( car );
 
    //then
    assertThat( carDto ).isNotNull();
    assertThat( carDto.getMake() ).isEqualTo( "Morris" );
    assertThat( carDto.getSeatCount() ).isEqualTo( 5 );
    assertThat( carDto.getType() ).isEqualTo( "SEDAN" );
}
相关推荐
信奥卷王4 分钟前
[GESP202503 五级] 原根判断
java·数据结构·算法
小咕聊编程12 分钟前
【含文档+源码】基于SpringBoot的过滤协同算法之网上服装商城设计与实现
java·spring boot·后端
Zz_waiting.13 分钟前
Spring 原理
java·spring·spring自动管理
瓯雅爱分享4 小时前
Java+Vue构建的采购招投标一体化管理系统,集成招标计划、投标审核、在线竞价、中标公示及合同跟踪功能,附完整源码,助力企业实现采购全流程自动化与规范化
java·mysql·vue·软件工程·源代码管理
追逐时光者6 小时前
推荐 12 款开源美观、简单易用的 WPF UI 控件库,让 WPF 应用界面焕然一新!
后端·.net
Jagger_6 小时前
敏捷开发流程-精简版
前端·后端
mit6.8247 小时前
[C# starter-kit] 命令/查询职责分离CQRS | MediatR |
java·数据库·c#
诸神缄默不语7 小时前
Maven用户设置文件(settings.xml)配置指南
xml·java·maven
任子菲阳7 小时前
学Java第三十四天-----抽象类和抽象方法
java·开发语言
苏打水com7 小时前
数据库进阶实战:从性能优化到分布式架构的核心突破
数据库·后端