背景
在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本身
- 使用了代碼生成的方式,而不是用反射,調用效率等同於自己寫的轉換