weblog

技術的なメモ置き場。

【MapStruct】参照型オブジェクトのマッピング

ネストされた参照型クラスのマッピングメソッドがある場合は、自動的にネストしているクラスのマッピングでそのマッピングが使用される。

環境

  • MapStruct : 1.2.0.Final
  • Java : 9
  • JUnit : 4.12
  • AssertJ : 3.9.1

Mapper

StudentにネストされているPersonのマッピングも定義する。

@Mapper
public interface SampleMapper {
    SampleMapper MAPPER = Mappers.getMapper(SampleMapper.class);

    Student toStudent(StudentEntity entity);

    Person toPerson(PersonEntity entity);
}

生成されたコード。 StudentのマッピングでPersonのマッピングが実行されている。

/*
@Generated(
    value = "org.mapstruct.ap.MappingProcessor",
    date = "2018-03-10T15:38:16+0900",
    comments = "version: 1.2.0.Final, compiler: javac, environment: Java 9.0.1 (Oracle Corporation)"
)
*/
public class SampleMapperImpl implements SampleMapper {

    @Override
    public Student toStudent(StudentEntity entity) {
        if ( entity == null ) {
            return null;
        }

        Student student = new Student();

        student.setPerson( toPerson( entity.getPerson() ) );

        return student;
    }

    @Override
    public Person toPerson(PersonEntity entity) {
        if ( entity == null ) {
            return null;
        }

        Person person = new Person();

        person.setName( entity.getName() );

        return person;
    }
}

テストコード

@Test
public void test() {
    PersonEntity personEntity = new PersonEntity("マイケル");
    StudentEntity entity = new StudentEntity(personEntity);

    Student student = SampleMapper.MAPPER.toStudent(entity);

    assertThat(student.getPerson().getName()).isEqualTo("マイケル");
}