public Member join (JoinDto dto){
Member member = new Member();
member.setEmailId(dto.getEmailId());
member.setPassword(dto.getPassword());
member.setUsername(dto.getUsername());
member.setRole("ROLE_MEMBER");
}
이게 내가 builer를 사용하는 가장 큰 이유인데 setter는 한 줄 마다 매핑을 해줘야 하지만
public Member join (JoinDto dto){
Member member = Member.builder()
.emailId(dto.getEmailId())
.password(dto.getPassword())
.username(dto.getUsername())
.role("ROLE_MEMBER")
.build();
}
builder는 이렇게 간편하게 작성할 수 있어 필드가 많을 수록 편하다.
public Member updateName (UpdateNameDto dto){
//repo에서 찾고
Member member=memberRepository.findBytId(dto.getId());
//수정
member.setUsername(dto.getUsername());
}
1번의 코드와 비교했을 때 setter는 메소드의 이름이 안보이는 상황(라인이 길어서)이라면 이게 수정인지 생서인지 구분이 어렵다.
public Member updateName (UpdateNameDto dto){
//repo에서 찾고
Member member=memberRepository.findBytId(dto.getId());
//수정
member.updateName(dto.getUsername());
}
builder는 이렇게 커스텀하여 쓸 수 있기 때문에 구분이 쉽다.
@Builder
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Schema(description = "회원 이메일")
private String emailId;
@Schema(description = "회원 비밀번호")
private String password;
@Schema(description = "회원 이름")
private String username;
@Schema(description = "권한")
private String role;
public void updateName(String username){
this.username=username;
}
}
@Builder(toBuilder = true)
이렇게 toBuilder를 허용해주면 개별적인 수정이 가능하다.
member = member.toBuilder()
.username(dto.getUsername())
.build();