댓글 CRUD 만들기
댓글과 게시글의 관계
one to many : 한개의 게시글에 여러개의 댓글이 달린다.
댓글이 실제 DB에 어떻게 저장되나?
article 테이블과 comment 테이블이 id를 기준으로 관계를 맺고 있다. 두 테이블 모두 자신을 대표하는 id가 있는데, id처럼 자기 자신을 대표하는 속성을 대표키라고 한다. PK
comment 테이블에는 연관 대상을 가리키는 article_id 가 하나 더 있다.
외래키 : 연관 대상을 가리키는 속성
외래키를 따라가면 해당 댓글이 어떤 게시글에 달린 것인지 알 수 있다.
댓글 엔티티와 리파지터리 설계
엔티티 : DB 데이터를 담는 자바 객체, 엔티티를 기반으로 테이블 생성
리파지토리 : 엔티티를 관리하는 인터페이스, 데이터 CRUD 등의 기능 제공
댓글 기능 추가를 위해 Comment 엔티티와 Comment 리파지토리 만들어야
그리고 댓글/ 본문 엔티티를 다대일 관계로 만들어 댓글에서 게시글을 찾아갈 수 있도록 한다.
Comment 엔티티를 만들고 리파지토리도 만들어야 하는데, 이번엔 CrudRepository 대신 JpaRepository 상속
CrudRepository와 Paging Sorting Repository 를 둘다 상속 받았기 때문에
엔티티의 CRUD 와 페이징, 정렬기능이 추가로 가능해진다.
댓글 엔티티 만들기
댓글 엔티티 클래스 생성 Comment.java
필드 선언
id -> 댓글의 대표값 @Id, @GeneratedValue(strategy = GenerationType=IDENTITY)
Article (부모 게시글) -> @ManyToOne, @JoinColumn(name = "article_id") : 외래키를 생성하고, Article 엔티티의 기본키와 매핑한다.
외래키 설정하면 Comment 엔티티로 생성될 DB의 테이블에 article_id 라는 속성이 만들어지며
부모 게시글 Article의 id와 자동으로 매핑된다. article_id 가 4 라면 4번 게시글의 댓글이라는 뜻
nickname
body
댓글 리파지토리 만들기
Comment 엔티티를 DB에 저장할 수 있게 댓글 리파지터리 만들기
페이지 처리와 정렬작업 까지 할 수 있도록 JpaRepository를 상속받는다.
쿼리를 메서드로 작성하기 - 특정 게시글의 모든 댓글 조회 / 특정 닉네임의 모든 댓글 조회
SQL 문법이 아닌 자바 메서드로 작성하기 - 네이티브 쿼리 메서드 native Query Method
직접 작성한 SQL 쿼리를 리파지터리 메서드로 실행할 수 있게 해준다.
@Query 어노테이션 이용하거나 orm.xml 파일 이용하기
SQL 문의 where 절에 조건을 쓸 때 매개변수 앞에 꼭 클론 : 을 붙여야 한다. 그래야 메서드에서 넘긴 매개변수와 매칭
ㅌ