-
변환이 필요한 이유
dto는 데이터를 운반시켜주고, entity는 데이터베이스의 실제 데이터에 접근하고
각자의 역할대로 실행해 주는 것이 어떻게 보면 번거로울 수 있지만
원치 않는 값 변경이나 테이블 이외의 값을 처리하기에도 용이하기 때문이다.
방법은 빌더패턴으로 사용할 수도 있고 ModelMapper를 사용할 수도 있는데빌더패턴을 사용해서 변환해 보았다.
값이 있는 생성자에 빌더어노테이션을 붙이고
서로 변환해주는 메서드를 넣었다.
도메인은 소스코드가 길어지지만 서비스 단에는 코드가 단순해졌다.
dto를 → entity로 바꾸기- 기존
private final MemberRepository memberRepository; public Member joinMember(MemberVO memberVO) { Member member = Member.builder() .memberName(memberVO.getMemberName()) .loginType("Y") .loginId(memberVO.getLoginId()) .loginPwd(memberVO.getLoginPwd()) .HpNo(memberVO.getHpNo()) .email(memberVO.getEmail()) .leaveYn("N") .joinDate(LocalDateTime.now()) .build(); return memberRepository.save(member); }
사용 : memberDto.toEntity();
@Builder public MemberDto(Long memberSeq, String memberName, String loginType, String loginId, String loginPwd, String hpNo, String email, String leaveYn, LocalDateTime joinDate) { this.memberSeq = memberSeq; this.memberName = memberName; this.loginType = loginType; this.loginId = loginId; this.loginPwd = loginPwd; this.hpNo = hpNo; this.email = email; this.leaveYn = leaveYn; this.joinDate = joinDate; } public Member toEntity() { return Member.builder() .memberName(memberName) .loginType("Y") .loginId(loginId) .loginPwd(loginPwd) .hpNo(hpNo) .email(email) .leaveYn("N") .joinDate(LocalDateTime.now()) .build(); }
entity를 → dto로 바꾸기
- 기존
public MemberDto getMember(Long memberSeq) { Member member = memberRepository.findById(memberSeq).orElse(null); MemberDto memberDto = MemberDto.builder() .memberSeq(member.getMemberSeq()) .memberName(member.getMemberName()) .loginId(member.getLoginId()) .loginType(member.getLoginType()) .build(); return memberDto; }
사용 : member.toDto();@Builder public Member(Long memberSeq, String memberName, String loginType, String loginId, String loginPwd, String hpNo, String email, String leaveYn, LocalDateTime joinDate) { this.memberSeq = memberSeq; this.memberName = memberName; this.loginType = loginType; this.loginId = loginId; this.loginPwd = loginPwd; this.hpNo = hpNo; this.email = email; this.leaveYn = leaveYn; this.joinDate = joinDate; } public MemberDto toDto() { return MemberDto.builder() .memberSeq(memberSeq) .memberName(memberName) .loginId(loginId) .loginType(loginType) .build(); }
뭐든 정답은 아니기 때문에 상황에 맞춰서 사용하기!
'프로젝트' 카테고리의 다른 글
CentOS 설치 후 자바 설치하기 (0) 2023.03.14 Ncloud) 간단하게 테스트서버 생성, 접속해보기 (classic, Centos) (0) 2023.03.13 Github Actions 설정하며 겪은 문제들 (gradle) (0) 2023.03.10 더 나은 entity를 구성하기 위한 노력 (0) 2023.03.08 자바 예외처리 @ControllerAdvice 사용해보기 (0) 2023.03.07 댓글