
Church 서비스를 만든다고 가정하고, Member (도메인 객체)를 정의했다.
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Getter
@EqualsAndHashCode
public class Member {
private Long id;
private String name;
private Gender gender;
private String position; // 직분
private LocalDate birthDate;
private String address;
private String phoneNumber;
}
위 Member 클래스에서 사용한 Gender(성별)는 enum 으로 정의했다.
public enum Gender {
MALE,
FEMALE
}
public interface MemberRepository {
Member save(Member member);
Optional<Member> findById(Long id);
List<Member> findAll(MemberSearchParam cond);
void update(Long memberId, MemberUpdateParam updateParam);
void delete(Long memberId);
}
Member 객체에 대한 CRUD 요청을 처리하는 MemberRepository 인터페이스를 정의했다.
findAll 메서드의 경우, 간단하게 name 으로 like 검색을 구현해 볼 계획이다.
@Getter
public class MemberSearchParam {
private String name;
public MemberSearchParam(String name) {
this.name = name;
}
}
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Getter
public class MemberUpdateParam {
private String name;
private Gender gender;
private String position; // 직분
private LocalDate birthDate;
private String address;
private String phoneNumber;
}
위 Member 객체를 영속화 하기 위한 members 테이블을 생성하였다.
DROP TABLE IF EXISTS members CASCADE;
CREATE TABLE members (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
gender ENUM('MALE', 'FEMALE') NOT NULL,
position VARCHAR(255),
birth_date DATE,
address VARCHAR(255),
phone_number VARCHAR(20)
);