MapStruct简单上手

MapStruct是一个强大的Java库,用于生成类型安全的转换器,简化了对象到对象映射的过程。它支持VO(展示层对象)、PO(请求参数对象)和DTO(数据传输对象)之间的映射。通过注解配置,MapStruct能自动映射相同名称和类型的属性,并允许自定义转换规则。使用@Mapper和@Mapping注解,可以定制转换逻辑,包括批量转换、更新对象以及处理日期和数字格式。此外,@AfterMapping和@MappingTarget可用于转换后的自定义操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

是一种实体类的映射框架,能够通过Java注解将一个实体类的属性安全的赋值给另一个实体类。

VO

展示层对象,后端返回给前端的数据封装对象。数据库存储所有的字段,而前端展示时不需要所有的字段,将需要使用的封装为一个对象VO返回给前端。

PO

请求参数对象,controller在处理请求是传递给controller的请求数据封装对象。

DTO

数据传输对象,将来自不同数据源的数据进行封装,比如来自mysql的多张表、es、neo4j等。

依赖引入
<dependency>
  <groupId>org.mapstruct</groupId>
  <artifactId>mapstruct-jdk8</artifactId>
  <version>${org.mapstruct.version}</version>
  <groupId>org.mapstruct</groupId>
  <artifactId>mapstruct</artifactId>
  <version>${org.mapstruct.version}</version>
  <groupId>org.mapstruct</groupId>
  <artifactId>mapstruct-processor</artifactId>
  <version>${org.mapstruct.version}</version>
</dependency>
转换类示例
@Mapper(componentModel = "spring")
public interface ObjectConverter {
    ObjectConverter INSTANCE = Mappers.getMapper(ObjectConverter.class);

	@Mappings({
        @Mapping(target = "", ignore = true)
    })
    ObjectDto po2DTO(ObjectPO objectPO);
}
MapStruct默认的一些映射规则
  1. 八种基本类型 <-> 八种基本类型的包装类 <-> String类型
  2. 日期类 <-> String类型
  3. 同名同类型的属性会自动映射赋值
@Mappings和@Mapping注解

source 源目标属性的名称 (转化前)
target 目标对象的属性名称 (转化后)
numberFormat 格式化数字类型(如:numberFormat = “#.00” 保留两位小数)
dateFormat 格式化日期类型(如:dateFormat = “yyyy-MM-dd HH:mm:ss”)
ignore 转换为的target对象忽略某个属性@Mapping(target = "color" ignore = true)CarVO对象则不转换来自source的color属性

属性是引用类型的转换

转换类中定义抽象方法或默认方法声明引用类型属性的转换规则

// public default CarVO carDTO2CarVO(CarDTO carDTO) {}

@Mapping(source = "cid" target = "id")
@Mapping(source = "fullName" target = "name")
DriverVO DriverDTO2DriverVO(DriverDTO driverDTO);
@AfterMapping和@MappingTarget

@AfterMapping(修饰方法)表明该方法在MapStruct进行转换后调用,@MappingTarget(修饰方法参数)表明该参数已经赋值。两者配合后可以进行自定义属性的赋值。

批量转换

在converter接口中添加批量转换的方法
List<CarVO> carDTOList2CarVOList(List<CarDTO> carDTOList);

@BeanMapping注解

@BeanMapping(ignoreByDefault = true)取消默认的映射行为,避免不需要的赋值

@InheritConfiguration
  • 更新对象

CarVO updateCarVOByCarDTO2(CarVo carVo, @MappingTarget CarDTO2 carDTO2)
//用新的CarDTO2对象更新CarVO对象

@InheritInverseConfiguration注解

反向继承,name属性表示继承哪个方法的Mapping配置,由A -> B,也可实现B -> A

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值