스프링 - JPA Query Methods란 무엇일까?

2024. 8. 21. 09:54스프링

 

2024/08/21

 

 

※   Query Methods란 무엇일까?

출처 : https://www.sherloqdata.io/query-management-and-how-can-you-benefit-from-it/


   ▶  Query Methods란?
                  ●  Spring Data JPA에서는 메서드 이름으로 SQL을 생성할 수 있는 Query Methods 기능을 제공한다.

🔎 스프링 Document에 JPA Query Methods에 대해 상세하게 나와 있다.
      https://docs.spring.io/spring-data/jpa/reference/jpa/query-methods.html

                  ●  JpaRepository 인터페이스에서 해당 인터페이스와 매핑되어있는 테이블에 요청하고자하는 SQL을
                      메서드 이름을 사용하여 선언할 수 있다.

    👉  예시)

package com.sparta.memo.repository;

import com.sparta.memo.entity.Memo;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;

public interface MemoRepository extends JpaRepository<Memo, Long> {
    List<Memo> findAllByOrderByModifiedAtDesc();
}


                  ●  SimpleJpaRepository 클래스가 생성될 때 위처럼 직접 선언한 JpaRepository 인터페이스의
                      모든 메서드를 자동으로 구현해준다.

                       paRepository 인터페이스의 메서드 즉, Query Methods는 개발자가 이미 정의 되어있는 규칙에
                         맞게 메서드를 선언하면 해당 메서드 이름을 분석하여 SimpleJpaRepository에서 구현이 된다.

                       따라서 우리는 인터페이스에 필요한 SQL에 해당하는 메서드 이름 패턴으로 메서드를 선언 하기만
                          하면 따로 구현하지 않아도 사용할 수 있다.

                  ●  findAllByOrderByModifiedAtDesc 해당 메서드 이름은 Memo 테이블에서 ModifiedAt 즉, 수정 시간을
                      기준으로 전체 데이터를 내림차순으로 가져오는 SQL을 실행하는 메서드를 생성할 수 있다.

                  ●  List<Memo> findAllByUsername(String username);
                       이렇게 Query Method를 선언했을 경우  ByUsername 에 값을 전달해줘야하기 때문에 파라미터에
                         해당 값의 타입과 변수명을 선언해준다.

                       즉, Query Methods 는 메서드의 파라미터를 통해 SQL에 필요한 값을 동적으로 받아 처리할 수 있다.

 

   ▶  Query Methods 적용해보기

    👉  예시)

                  ●  최신 메모가 가장 상단에 나올 수 있도록 수정

public List<MemoResponseDto> getMemos() {
    // DB 조회
    return memoRepository.findAllByOrderByModifiedAtDesc().stream().map(MemoResponseDto::new).toList();
}

 

 

 

 

'스프링' 카테고리의 다른 글

스프링 - Mockito란?  (0) 2024.08.23
스프링 - 테스트 사용 방법  (0) 2024.08.22
스프링 - JPA Auditing 적용하기  (0) 2024.08.20
스프링 - RestTemplate & Open API  (0) 2024.08.19
스프링 - RESTful API이란 무엇일까?  (0) 2024.08.16