SpringとJPAに基づくWebアプリケーション開発#35 ModelMapper
16098 ワード
SpringとJPAに基づくWebアプリケーション開発#35 ModelMapper
これらはインフラストラクチャ、Spring、JPAベースのWebアプリケーション開発のコースに基づいて作成されています.
要約は、学習コース、要約ソースのタグ付け、ブログまたはドキュメント形式で公開できるようにする原則の下で公開されます.出典は前述の通り、インフラストラクチャ、Spring、JPAベースのWebアプリケーション開発.
私が勉強しているソースコードはhttps://github.com/n00nietzsche/jakestudy_webappにアップロードされます.私は伝言ごとに講義のどの部分を記録します.
http://modelmapper.org/ オブジェクトの輪郭を他のオブジェクトの輪郭にマッピングするユーティリティ .
依存性 を追加チャット年齢設定 2 http://modelmapper.org/user-manual/configuration/#matching-strategies
ネストされている場合は,どのようにカットや読み取りを行うかなどの主観的な決定はできない.
デフォルトは
たとえば、
これらはインフラストラクチャ、Spring、JPAベースのWebアプリケーション開発のコースに基づいて作成されています.
要約は、学習コース、要約ソースのタグ付け、ブログまたはドキュメント形式で公開できるようにする原則の下で公開されます.出典は前述の通り、インフラストラクチャ、Spring、JPAベースのWebアプリケーション開発.
私が勉強しているソースコードはhttps://github.com/n00nietzsche/jakestudy_webappにアップロードされます.私は伝言ごとに講義のどの部分を記録します.
ModelMapperの適用
<dependency>
<groupId>org.modelmapper</groupId>
<artifactId>modelmapper</artifactId>
<version>2.3.6</version>
</dependency>
modelMapper.getConfiguration()
.setSourceNameTokenizer(NameTokenizer.UNDERSCORE)
.setDestinationNameTokenizer(NameTokenizer.UNDERSCORE)
UNDERSCORE
()を使用している場合にのみ、ネストされたオブジェクトを参照しているとみなされます.そうしないと、オブジェクトの直接propertyにバインドされます.ModelMapperでの質問
ネストされている場合は,どのようにカットや読み取りを行うかなどの主観的な決定はできない.
デフォルトは
NamingConventions.NONE
で、命名規則なしですべてのプログラム名に適用されます.たとえば、
NotificationsForm
の内部にisStudyCreatedByEmail
というフィールドがあります.このとき、ModelMapper
は、Study
という内部クラスのCreatedByEmail
というフィールドを探しているかどうか分からないことを示す.このため、account.setEmail()
を入れるデータを選択すると、複数の候補地が出現するエラーが発生した. @Bean
public ModelMapper modelMapper() {
ModelMapper modelMapper = new ModelMapper();
modelMapper.getConfiguration()
.setDestinationNameTokenizer(NameTokenizers.UNDERSCORE)
.setSourceNameTokenizer(NameTokenizers.UNDERSCORE);
return modelMapper;
}
前述したように、UNDERSCORE
(_
)でなければ、名前がどのように書かれていても、名前全体がプログラム名として扱われます.ネストされた表示をしたい場合は、構成で設定したようにUNDERSCORE
を使用できます.ModelMapper依存性の追加
<!-- 모델 맵퍼 -->
<dependency>
<groupId>org.modelmapper</groupId>
<artifactId>modelmapper</artifactId>
<version>2.3.6</version>
</dependency>
ModelMapper Bean登録
@Bean
public ModelMapper modelMapper() {
ModelMapper modelMapper = new ModelMapper();
modelMapper.getConfiguration()
.setDestinationNameTokenizer(NameTokenizers.UNDERSCORE)
.setSourceNameTokenizer(NameTokenizers.UNDERSCORE);
return modelMapper;
}
どうせずっと生成されているわけではないので、登録が空いていれば便利です..setDestinationNameTokenizer()
メソッドでは、UNDERSCORE
の場合のみチャット年齢を設定し、ネストされたpropertyを指定するには、_
を使用すればよい.CamelCaseがネストされたPropertyを指すという誤解から解放される.ModelMapperの使用
CASE 1:インスタンス化されたマッピング
受精前
public void updateProfile(Account account, Profile profile) {
account.setUrl(profile.getUrl());
account.setBio(profile.getBio());
account.setLocation(profile.getLocation());
account.setOccupation(profile.getOccupation());
// TODO: 프로필 이미지
account.setProfileImage(profile.getProfileImage());
// TODO: 중요한 문제가 하나 더 남았다.
}
変更後
public void updateProfile(Account account, ProfileForm profileForm) {
// from Source to Destination 로 데이터를 전달해줌
// 프로퍼티의 이름이 일치한다는 가정 하에서 쓰는 것임
// 대량의 Setter 를 발생시킨다.
modelMapper.map(profileForm, account);
}
最初のパラメータにsourceを簡単に、2番目のパラメータにdestinationを与えます.内部に大量のsetterが生成され、property名に一致する部分がそのまま移動します.CASE 2:インスタンスマッピングなし
受精前
model.addAttribute(new ProfileForm(loginAccount));
public ProfileForm(Account account) {
this.bio = account.getBio();
this.url = account.getUrl();
this.occupation = account.getOccupation();
this.location = account.getLocation();
this.profileImage = account.getProfileImage();
}
変更後
model.addAttribute(modelMapper.map(loginAccount, ProfileForm.class));
클래스명.class
を使用してクラス情報自体を入れると、戻り値がクラスのオブジェクトになります.Reference
この問題について(SpringとJPAに基づくWebアプリケーション開発#35 ModelMapper), 我々は、より多くの情報をここで見つけました https://velog.io/@jakeseo_me/스프링과-JPA-기반-웹-애플리케이션-개발-35-ModelMapper-적용テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol