背景
项目采用mapstruct
做对象属性拷贝,项目的多个实体类有相同的属性,比如createTime
,在配置映射时如果都用忽略某个映射的数据,或则修改映射属性名,那每个@Mappings
里都要配置:
@Mappings(value = {
@Mapping(target = "id", ignore = true),
@Mapping(source = "createTime", target = "insertTime")
})
是否可以将这样相同的配置抽取出来?
解决方案
官方文档:MapStruct 1.4.2.Final Reference Guide
代码
公共配置:
@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
后支持了。
进阶
那如果是只想一个类有很多字段,但是只想映射其中少了的几个字段呢?
可以在@Mapping
时设置ignore = true
:
@Mapping(target = "id", ignore = true)
但是如上诉所说,如果类有很多个字段的情况下,还得给每个字段加上配置,太麻烦了,是否还有其他方式?
可以通过配置@BeanMapping(ignoreByDefault = true)
类忽略没有配置@Mapping
的字段。MapStruct 1.4.2.Final Reference Guide - defining-mapper
还可以通过配置unmappedTargetPolicy
的方式。MapStruct 1.4.2.Final Reference Guide - shared-configurations
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。