LoginSignup
0
1

More than 1 year has passed since last update.

【Spring】Entityから別のmodelに値をセットする

Posted at

はじめに

業務でJavaを使うことになったが、少しブランクがあるため、記事としてまとめる。

背景

Entityでセットされた値を、modelに格納したいと考えた。しかし、modelのsetterを呼び出し、setterの引数にEntityのgetterを呼び出すのは、フィールドの数が多い場合、可読性に欠けると考え、わざわざ上記のようなことをしなくてもmodelに格納することが出来ないかと思った経由から始まった。

実装

ちなみに、lombokを使用しているため、setterとgetterは記載していない。

DBから取得・格納済みのEntityクラス

Entity.java
@Getter
@Setter
@Entity
public class Entity {
  private String entityStringA;
  private String entityStringB;
  private String entityDateTime;
}

Entityクラスからセットするmodelクラス

Model.java
@Getter
@Setter
@Entity
public class Model {
  private String modelStringA;
  private String modelStringB;
  private DateTime modelDateTime;
}
変換する処理
int id = 1;
Entity entity = xxx.fetchXxx(id);

// entityクラスに格納された値がmodelにセットされる
Model model = modelMapper.map(entity, Model.class);
// entityDateTimeからmodelDateTimeを格納しているが、型がStringからDateTime
// にしているが、String⇒DateTimeと型変換をしてくれる

EntityとModelのフィールド名が同じ場合は以下クラスは不要だが、今回のようにフィールド名を変更したい場合、以下設定クラスを作成する必要がある。

app/comfig/ModelMapperConfig
@Configuration
public class ModelMapperConfig {

  @Bean
  public ModelMapper modelMapper() {
    ModelMapper modelMapper = new ModelMapper();
    modelMapper.getConfiguration().setAmbiguityIgnored(true);
    convert(modelMapper);
    return modelMapper;
  }

  private void convert(ModelMapper modelMapper) {
    TypeMap<RecruitmentDetail, JobPosting> mapperTypeMap = 
      modelMapper.createTypeMap(Entity.class, Model.class);

    // mapper.mapの第一引数に取得対象の値のgetterを指定
    // mapper.mapの第二引数にセット対象の値のsetterを指定
    mapperTypeMap.addMappings(mapper -> {
      mapper.map(Entity::getEntityStringA, Model::setModelStringA);
      mapper.map(Entity::getEntityStringB, Model::setModelStringB);
      mapper.map(Entity::getEntityDateTime, Model::setModelDateTime);
    });
  }
}
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1