MapStruct

357 阅读1分钟

注意:为entity添加setter和getter方法

dependencies

<dependency>
    <groupId>org.mapstruct</groupId>
    <artifactId>mapstruct-jdk8</artifactId>
    <version>1.2.0.Final</version>
</dependency>
<dependency>
    <groupId>org.mapstruct</groupId>
    <artifactId>mapstruct-processor</artifactId>
    <version>1.2.0.Final</version>
</dependency>

SimplePersonConverter

  • 属性名相同时可以省略@Mapping
  • 属性名不同时需要@Mapping
  • constant可以注入常量
  • defaultValue在source为null时注入
  • qualifiedByName和Named注解配合注入
  • enum类型可以通过string注入
@Mapper
public interface SimplePersonConverter {

    SimplePersonConverter INSTANCE = Mappers.getMapper(SimplePersonConverter.class);

    @Mappings({
            @Mapping(target = "id", source = "id"),
            @Mapping(target = "personName", source = "studentName"),
            @Mapping(target = "age", constant = "18"),
            @Mapping(target = "sex", source = "sex", defaultValue = "男"),
            @Mapping(target = "personBook", source = "bookName", qualifiedByName = "convertBook"),
            @Mapping(target = "personStatus", source = "studentStatus")
    })
    SimplePerson toSimplePerson(ComplexPerson source);

    @Named("convertBook")
    default PersonBook convert(String bookName) {
        return new PersonBook(bookName);
    }
}

ComplexPerson

public class ComplexPerson {

    private Long id;

    private String studentName;

    private String sex;

    private String bookName;

    private String studentStatus;
}

SimplePerson

public class SimplePerson {

    private Long id;

    private String personName;

    private Integer age;

    private String sex;

    private PersonBook personBook;

    private PersonStatus personStatus;
}

PersonBook

public class PersonBook {
    public PersonBook(String name) {
        this.name = name;
    }

    private String name;
}

PersonStatus

public enum PersonStatus {
    OFFLINE, ONLINE
}