weblog@kentama

技術的なメモ置き場。主にJava。

【MapStruct】Mappingを継承する

@InheritConfiguration または @InheritInverseConfiguration を使うことでマッピングを継承することができる。

環境

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

Mapperの作成

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

    @Mapping(target = "emailAddress", source = "email")
    Person toPerson(PersonEntity entity);

    @InheritConfiguration
    Person toPersonInherit(PersonEntity entity);
}

テストコード

    @Test
    public void test() {
        PersonEntity entity = new PersonEntity();
        entity.setEmail("hoge@example.com");
    
        Person person = PersonMapper.MAPPER.toPersonInherit(entity);
    
        assertThat(person.getEmailAddress()).isEqualTo("hoge@example.com");
    }

@InheritInverseConfiguration を使うと、逆向きのマッピングができる。

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

    @Mapping(target = "emailAddress", source = "email")
    Person toPerson(PersonEntity entity);

    @InheritInverseConfiguration
    PersonEntity toPersonInverse(Person person);
}

継承したいマッピングと同様のマッピングが複数定義してある場合は nameマッピングメソッド名を指定する。

@InheritInverseConfiguration(name = "toPerson")
PersonEntity toPersonInverse(Person person);