MapStruct

MapStruct

MapStruct遵循“约定优于配置”的原则,简化了Java bean类型之间映射的实现。
多层应用程序通常需要在不同的对象模型(例如实体和dto)之间进行映射。编写这样的映射代码是一项乏味且容易出错的任务。MapStruct旨在通过尽可能自动化来简化这项工作。


官网

快速开始

maven 依赖:

<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>1.3.1.Final</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.3.1.Final</version>
</dependency>

准备:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Car {
private String make;
private int numberOfSeats;
private CarType type;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CarDto {
private String make;
private int seatCount;
private String type;
}
import lombok.Getter;
public enum CarType {
Buick(1,"Buick"),
Cadillac(2,"Cadillac");
@Getter
private int id;
private String brand;
CarType(int id, String brand) {
this.id = id;
this.brand = brand;
}
}
import org.example.entity.Car;
import org.example.entity.CarDto;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
/**
* @author: jinnanDu
* @description:
* @date: 2024/8/20 13:59
*/
@Mapper
public interface CarMapper {
CarMapper INSTANCE = Mappers.getMapper( CarMapper.class );
@Mapping(source = "numberOfSeats", target = "seatCount")
CarDto carToCarDto(Car car);
}

测试:

@Test
void testMapStruct() {
Car car = new Car("SGM",5, CarType.Buick);
CarDto carDto = carMapper.INSTANCE.carToCarDto(car);
System.out.println("car: "+car.toString());
System.out.println("CarDto: "+carDto.toString());
}

坑,可能是版本问题,
目前解决方法:不用lombok

java: No property named "numberOfSeats" exists in source parameter(s). Type "Car" has no properties.

测试结果:

posted @   渔樵江渚  阅读(26)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示