mapstruct的几个使用方法

总结mapstruct的几个使用方法

最基本的使用方法

1
2
3
4
@Mapper(componentModel = "spring")
public interface UserMapper {
User toUser(UserEntity entity)
}

最简单的自定义

1
2
3
4
5
@Mapper(componentModel = "spring")
public interface UserMapper {
@Mapping(target = "name", expression = "java(entity.lastName + \" \" + entity.lastName")
User toUser(UserEntity entity)
}

单个项目需要一个方法处理

1
2
3
4
5
6
7
8
9
10
@Mapper(componentModel = "spring")
public interface UserMapper {
@Mapping(target = "name", qualifiedByName = "nameToString")
User toUser(UserEntity entity)

@Named("nameToString")
default String defaultValueForQualifier(UserEntity entity) {
return entity.lastName + " " + entity.lastName;
}
}

多个项目需要一个方法处理

1
2
3
4
5
6
7
8
9
10
11
12
13
@Mapper(componentModel = "spring")
public interface UserMapper {
@BeanMapping(qualifiedByName = "toUser")
User toUser(UserEntity entity)

@Named("toUser")
@AfterMapping
default void afterToUser(UserEntity entity, @MappingTarget User dto) {
......
dto.setName(entity.getLastName + " " + entity.getFirstName);
......
}
}

因为@AfterMapping的选择执行是根据参数和返回值来做的,如果一个mapper里没有多个相同类型的方法的话,可以省略@BeanMapping@Named

旧版本java

java8以下的版本,inteface没有默认方法,可以使用Decorators的方式,略