[Spring Data JPA] JPA Query Methods - QuickStart 5 (End)

[Spring Data JPA] JPA Query Methods - QuickStart 5 (End)

2021.12.12 - [Spring/Spring Data JPA] - [Spring Data JPA] Fetch Join (N + 1 Issue) - QuickStart 4

2021.12.12 - [Spring/Spring Data JPA] - [Spring Data JPA] 연관 관계 자식(하위) Entity 작성 - QuickStart 3

2021.12.12 - [Spring/Spring Data JPA] - [Spring Data JPA] JPA Entity, Repository, Service 클래스 작성 (조회 및 저장) - QuickStart 2

2021.12.12 - [Spring/Spring Data JPA] - [Spring Data JPA] 예제 프로젝트 생성 및 초기 환경 구성 - QuickStart 1

이전글의 내용을 이어서 작성합니다.

# 해당 시리즈 게시글은 Notion에서 작성된 내용을 그대로 옮겨오는 과정에서 서식의 깨짐 및 부자연스러움이 발생할 수 있습니다.

JPA Query Methods

Spring Data JPA는 간편하게 Repository 인터페이스에서의 Method Naming 만으로 간단한 SQL문을 수행해줍니다. 이를 Query Methods라고 합니다.

Query Methods는 이미 정해진 단어 및 SQL 예약어에 따라 메소드의 Naming Rule이 존재합니다. 자세한 설명은 아래 공식 문서를 통해 확인할 수 있습니다.

그렇다면 예시로 게시글의 제목이 특정 키워드를 포함하는 게시글의 목록을 조회하는 쿼리를 수행하는 로직을 작성해봅니다.

io.starter.jpatutorial.domain.repository.PostMariaRepository

@Repository public interface PostMariaRepository extends JpaRepository { List findByTitleContains(String keyword); }

io.starter.jpatutorial.service.PostListService

@Service @RequiredArgsConstructor public class PostListService { private final PostMariaRepository postMariaRepository; @Transactional(readOnly = true) public List fetchByContains(String title) { return postMariaRepository.findByTitleContains(title) .stream() .map(Post::jpoOf) .collect(Collectors.toList()); } }

io.starter.jpatutorial.JpaTutorialApplicationTests

package io.starter.jpatutorial; import io.starter.jpatutorial.domain.model.Post; import io.starter.jpatutorial.service.CommentService; import io.starter.jpatutorial.service.PostListService; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import java.util.List; @SpringBootTest class JpaTutorialApplicationTests { @Autowired private PostListService postListService; @ParameterizedTest @ValueSource(strings = "1") @DisplayName("게시글의 제목이 특정 키워드를 포함 목록 조회 테스트") void fetch(String keyword) { List posts = postListService.fetchByContains(keyword); Assertions.assertNotEquals(posts.size(), 0); System.out.println("Posts --> " + posts); } }

테스트 코드는 게시글 제목에 숫자 1이 포함되는 게시글의 목록을 조회하는것으로 수행합니다.

테스트 코드 수행시 아래와 같이 임의의 Where Like 구문이 수행되는것을 알 수 있고 결과 데이터도 1이 포함되 있는 데이터 1건이 조회되는것을 알 수 있습니다.

End

기본적인 가이드는 여기서 마무리하고자 합니다.

실제 Spring Data JPA를 기반으로 실제 서비스를 운영하고 복잡한 비즈니스 로직을 개발하다보면 다양한 문제점이 많이 발생할 수 있습니다.

또한 중요한 개념적 정립이 필요한 사항들도 있습니다.

하지만 잘 작성된 레퍼런스를 참고한다면 문제의 해결하는것이 어렵지만은 않을것 같습니다.

프로젝트 전체 소스 코드는 아래 Github에서 참고 가능합니다.

Github Source Code

from http://antdev.tistory.com/91 by ccl(A) rewrite - 2021-12-12 15:27:03