방명록 조회 처리
- @Id 에 해당하는 번호를 이용해서 처리
- 컨트롤러에서는 Model을 이용해서 처리 결과를 반환
- 화면에서 목록 페이지로 가는 링크가 필요하므로 PageRequestDTO를 그대로 화면에 전송해서 목록으로 가는 링크를 처리
@GetMapping("/read")
public void read(long gno, @ModelAttribute("requestDTO") PageRequestDTO requestDTO, Model model ){
log.info("gno: " + gno);
GuestbookDTO dto = service.read(gno);
model.addAttribute("dto", dto);
}
방명록 수정과 삭제
•서비스 계층
- 삭제 – Repository의 deleteById( )를 이용해서 처리
- 수정 – 엔티티를 조회해서 가져온 후 변경할 부분만을 변경해서 수정하는 방식
•컨트롤러
- 삭제 – POST방식으로 처리 후 목록 화면으로 리다이렉트
- 수정 – POST방식으로 처리 후 조회 화면으로 리다이렉트 처리
검색 처리
•서버측 처리
- Repository에서는 Querydsl을 이용해서 다양한 상황에 맞는 JPQL생성 처리
- 서비스 계층에서는 PageResultDTO를 구성
•컨트롤러 처리
- 검색 타입과 검색 키워드를 반영하도록 PageRequestDTO 변경
•화면 처리
- 검색 조건을 화면에 표시할 수 있도록 수정
- 검색 버튼 추가
- 조회 등의 모든 작업에 검색 조건이 추가될 수 있도록 변경
- 조회 화면/수정 화면 등 모든 화면에서 목록으로 갈 때 검색 조건과 키워드가 유지되도록 처리해야 함
연관관계와 관계형 데이터베이스 설계
- 관계형 데이터베이스에서는 개체(entity)간의 관계로 데이터를 표현
- 관계를 구성하는 핵심은 PK(primary key, 주키)와 FK(foreign key, 외래키)
- 데이터 베이스에서 해석할때는 항상 pk 쪽에서 해석
- 데이터베이스 설계는 PK를 기준으로 해석해서 작성하고 JPA의 연관관계는 DB설계의 FK를 이용해서 연관관계를 시작. FK를 가진 쪽에 참조가 있듯이 클래스 내에 참조를 선언
•Member 클래스 : 이메일 주소를 PK로 사용. FK를 사용하지 않으므로 별도의 참조가 필요하지 않음
•Board 클래스 : Member의 이메일(PK)을 FK로 참조하는 구조
•Reply 클래스 : Board와 연관관계를 맺지 않은 상태로 처리
board와 member 관계는 N:1(다대일)관계가 되므로 JPA에서 @ManyToOne을 적용해야 함.
@ManyToOne은 데이터베이스 상에서 외래키의 관계로 연결된 클래스에 설정