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 @ 2024-08-20 15:43  渔樵江渚  阅读(52)  评论(0)    收藏  举报