效率提升-簡化java開發中pojo的轉換(mapstruct)

背景

在java的web開發中,pojo轉換難以避免,mapstruct工具幫我們進行了簡化,本wiki將進行實踐。

實踐過程

簡易實踐

創建一個hello項目(最簡單的maven項目即可)。
在這裏插入圖片描述
pom文件添加依賴

    <properties>
        <mapstruct.version>1.3.1.Final</mapstruct.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.mapstruct</groupId>
            <artifactId>mapstruct</artifactId>
            <version>${mapstruct.version}</version>
        </dependency>
        <dependency>
		    <groupId>org.mapstruct</groupId>
		    <artifactId>mapstruct-processor</artifactId>
		    <version>${mapstruct.version}</version>
		</dependency>
    </dependencies>

添加一個實體類Car

public class Car {

    private String make;
    private int numberOfSeats;
    private CarType type;

    public String getMake() {
        return make;
    }

    public void setMake(String make) {
        this.make = make;
    }

    public int getNumberOfSeats() {
        return numberOfSeats;
    }

    public void setNumberOfSeats(int numberOfSeats) {
        this.numberOfSeats = numberOfSeats;
    }

    public CarType getType() {
        return type;
    }

    public void setType(CarType type) {
        this.type = type;
    }
}

添加一個CarType的enum類

public enum CarType {
    /**
     *
     */
    ONE
}

添加一個CarDto實體類

public class CarDto {

    private String make;
    private int seatCount;
    private String type;

    public String getMake() {
        return make;
    }

    public void setMake(String make) {
        this.make = make;
    }

    public int getSeatCount() {
        return seatCount;
    }

    public void setSeatCount(int seatCount) {
        this.seatCount = seatCount;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }
}

下面我希望直接能進行Car到CarDto的轉化,那麼就寫一個Mapper

@Mapper
public interface CarMapper {
    @Mappings({
            @Mapping(source = "numberOfSeats", target = "seatCount")
    })
    CarDto carToCarDto(Car car);
}

由於make變量在Car和CarDto裏面是一樣的,所以並不需要特殊設置,就可以直接進行copy。

下面在Main裏面進行一下測試。

    public static void main(String[] args) {
        System.out.println("hello");
        Car car = new Car();
        car.setMake("make");
        car.setNumberOfSeats(2);
        car.setType(CarType.ONE);

        System.out.println(car);
        System.out.println(CarMapper.INSTANCE.carToCarDto(car));
    }

在這裏插入圖片描述
可以正常進行轉換。

重點分析

轉換的本質是,mapStruct進行了轉換代碼生成(注意,這裏並沒有使用反射,所以調用速度會很快)
在這裏插入圖片描述

評價

  • 使用mapStruct能提高開發效率,不必再去寫pojo的具體轉換,但是需要先了解一下mapStruct本身
  • 使用了代碼生成的方式,而不是用反射,調用效率等同於自己寫的轉換
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章