変換[Java]dtoとentity-2
21137 ワード
続けて上記に書きます.builder方式でコードを書く量が多く、不便です.問題を解決するために見つけた方法はObjectMapperです.
フロントエンドからバックエンドへのデータはSpringから受信したときもObjectMapperで変換されます.△私はよくエラーメッセージから思い出します. usersDto
シリアル化設定はNull値でシリアル化されず、逆シリアル化設定はターゲットクラスに宣言された変数がない場合に変換されません.
コードは短く見えないかもしれませんが、変数が多ければ多いほど、減少するコード量が多くなります.
長所コード量が大幅に減少しました. 短所は、すべてのdtoまたはエンティティに設定する必要があります. 外来鍵によってバンドルされた他のエンティティまたはdtoは変換されません. 例で作成したentityに関係のないテーブル.TOYプロジェクトで作成しても,ユーザ情報を含むエンティティが関係しないことはほとんどない. testDto ユーザーDto->外部キーを追加
フロントエンドからバックエンドへのデータはSpringから受信したときもObjectMapperで変換されます.△私はよくエラーメッセージから思い出します.
@Data
@NoArgsConstructor
public class UsersDto {
private int id;
private String token;
private String password;
private Date regDate;
private String email;
@Builder
public UsersDto(int id, String token, String password, Date regDate, String email) {
this.id = id;
this.token = token;
this.password = password;
this.regDate = regDate;
this.email = email;
}
// 1편에서 사용한 방식
public static UsersEntity converter(UsersDto usersDto){
if(usersDto == null) return null;
return UsersEntity.builder()
.token(usersDto.getToken())
.password(usersDto.getPassword())
.regDate(usersDto.getRegDate())
.email(usersDto.getEmail())
.build();
}
public static UsersEntity mapper(UsersDto usersDto){
if(usersDto==null) return null;
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS,false);
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false);
return objectMapper.convertValue(usersDto,UsersEntity.class);
}
ずっと簡単になりました.ObjectMapperでシーケンス化と逆シーケンス化を設定し、convertValue(変換するオブジェクト、変換するクラス)メソッドを使用します.シリアル化設定はNull値でシリアル化されず、逆シリアル化設定はターゲットクラスに宣言された変数がない場合に変換されません.
コードは短く見えないかもしれませんが、変数が多ければ多いほど、減少するコード量が多くなります.
長所
@Data
public class TestDto {
private int i1=0;
private String s1="";
private float f1 = 0;
@Builder
public TestDto(int i1, String s1,, float f1,) {
this.i1 = i1;
this.s1 = s1;
this.f1 = f1;
}
}
@Data
@NoArgsConstructor
public class UsersDto {
private int id;
private String token;
private String password;
private Date regDate;
private String email;
private TestDto testDto;
@Builder
public UsersDto(int id, String token, String password, Date regDate, String email,TestDto testDto) {
this.id = id;
this.token = token;
this.password = password;
this.regDate = regDate;
this.email = email;
this.testDto = testDto;
}
// 1편에서 사용한 방식
public static UsersEntity converter(UsersDto usersDto){
// OneToOne관계의 테이블
TestDto testDto = usersDto.getTestEntity();
TestEntity testEntity = testDto.builder()
.i1(testDto.getI1())
.s1(testDto.getS1())
.f1(testDto.getF1())
.build();
return UsersEntity.builder()
.token(usersDto.getToken())
.password(usersDto.getPassword())
.regDate(usersDto.getRegDate())
.email(usersDto.getEmail())
.testDto(testDto)
.build();
}
public static UsersEntity mapper(UsersDto usersDto){
if(usersDto==null) return null;
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS,false);
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false);
UsersEntity usersEntity = objectMapper.convertValue(usersDto,UsersEntity.class);
TestDto testDto = objectMapper.convertValue(testDto, TestEntity);
usersEntity.setTestDto(testDto);
return usersEntity;
}
以上のように,外部キーが長ければ長いほどコード量が大きくなり@Builder方式は断念する.2つ目の方法は,コードを繰り返すたびにトラブルを解決しようとし,JENNERIC法を用いて試みた.Reference
この問題について(変換[Java]dtoとentity-2), 我々は、より多くの情報をここで見つけました https://velog.io/@a45hvn/Java-dto와-entity-변환하기-2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol