본문 바로가기
Java/Spring Boot

[Day 14] 댓글 엔티티와 리파지터리 만들기

by 깨준 2024. 8. 10.

1. 댓글 기능의 개요

1. 댓글과 게시글의 관계

하나의 게시글에 수많은 댓글이 달린다. 이러한 관계를 일대다(1:n) 관계라고 한다. 거꾸로 댓글 입장에서 여러 댓글이 하나의 게시글에 달리는 것은 다대일(n:1) 관계라고 한다.

 

article : comment = 1 : n 관계

article_id와 같이 자신을 대표하난 속성을 기본키(PK, Primary Key)라고 하고 comment 테이블에서 article_id와 같이 연관 대상을 가리키는 속성을 외래키(FK, Foreign Key)라고 한다.

 

2. 댓글 엔티티와 리파지터리 설계

엔티티: DB 데이터를 담는 자바 객체로, 엔티티를 기반으로 테이블 생성

리파지터리: 엔티티를 관리하는 인터페이스로 데이터 CRUD 등의 기능 제고

 

  • Repository: 최상의 리파지터리 인터페이스
  • CrudRepository ListCrudRepository: 엔티티의 CRUD 기능 제고
  • PagingAndSortingRepository 및 ListPagingAndSortingRepository: 엔티티의 페이징 및 정렬 기능 제공
  • JpaRepository: 엔티티의 CRUD 기능과 페이징 및 정렬 기능뿐만 아니라 JPA에 특화된 기능을 추가로 제공

2. 댓글 엔티티 만들기

1. 댓글 엔티티 만들기

com.example.firstproject > entity > Comment.java 만들기

 

필요한 어노테이션 추가

 

각 속성에 맞는 어노테이션 추가하기

실행 결과!

 

2. 더미 데이터 추가하기

resource > data.sql 데이터 추가하기

실행 결과!

 


3. 댓글 리파지터리 만들기

1. 댓글 리파지터리 만들기

com.example.firstproject > repository > CommentRepository 만들기

JpaRepository<대상_엔티티, 대표키_값의_타입>

 

쿼리를 메서드로 작성하는 방법으로 네이티브 쿼리 메서드(native query method)가 있다.

네이티브 쿼리 메서드는 직접 작성한 SQL 쿼리를 리파지터리 메서드로 실행할 수 있게 한다.

네이티브 쿼리 메서드를 만드는 방법은 2가지가 있다.

  • Query 어노테이션 이용
  • orm.xml파일 이용
@Query (value= "퀴리", nativeQuery = true)

@Query 어노테이션은 SQL과 유사한 JPQL(Java Persistence Query Language)이라는 객체 지향 쿼리 언어를 통해 복잡한 퀴리 처리를 지원한다.

CommentRepository.java
orm.xml

 

2. 댓글 리파지터리 테스트 코드 작성하기

test > ... > repository > CommentRepositoryTest.java 만들기

@DataJpaTest 어노테이션 추가랑 commentRepository 객체 주입

 

@DisplayName("테스트_결과에_따라_보여_줄_이름")

@DisplayName은 테스트 이름을 붙일 때 사용. 메서드 이름은 그대로 둔 채 테스트 이름을 바꾸고 싶을 때 사용.

 

1) findByArticleId() -> 4번 게시글의 모든 댓글 조회 테스트

 

2) findByArticleId() -> 1번 게시글의 모든 댓글 조회 테스트

 

3) findByNickname() -> "짱구"의 모든 댓글 조회 테스트