【小知識】mapstruct通用配置

noname發表於2021-12-03

背景

專案採用mapstruct做物件屬性拷貝,專案的多個實體類有相同的屬性,比如createTime,在配置對映時如果都用忽略某個對映的資料,或則修改對映屬性名,那每個@Mappings裡都要配置:


@Mappings(value = {

        @Mapping(target = "id", ignore = true),

        @Mapping(source = "createTime", target = "insertTime")

})

是否可以將這樣相同的配置抽取出來?

解決方案

官方文件:MapStruct 1.4.2.Final Reference Guide
image.png

程式碼

公共配置:

@Retention(RetentionPolicy.CLASS)
@Mappings(value = {
        @Mapping(target = "id", ignore = true),
        @Mapping(source = "createTime", target = "insertTime")
})
public @interface CommonEntityMapping {

}

實際使用:

@Mappings(value = {
        @Mapping(source = "filed1", target = "field2")
})
@CommonEntityMapping
MyEntity convert(MyModel myModel);

另:專案剛開始使用的mapstruct版本是1.2.0-Final,不支援在上註解@Mappings,升級到1.4.2-Final後支援了。