Spring/팀스파르타

23. Query Methods란 무엇일까?

열심히 해 2024. 11. 8. 09:32

Spring Data JPA에서는 메서드 이름으로 SQL을 생성할 수 있는 Query Methods 기능을 제공합니다.

 

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

 

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();
    List<Memo> findAllByUsername(String username);
}

 


 

  • SimpleJpaRepository 클래스가 생성될 때 위처럼 직접 선언한 JpaRepository 인터페이스의 모든 메서드를 자동으로 구현해줍니다.
    • JpaRepository 인터페이스의 메서드 즉, Query Methods는 개발자가 이미 정의 되어있는 규칙에 맞게 메서드를 선언하면 해당 메서드 이름을 분석하여 SimpleJpaRepository에서 구현됩니다.
    • 따라서 우리는 인터페이스에 필요한 SQL에 해당하는 패턴으로 메서드를 선언하는 것으로, 해당 기능을 사용할 수 있습니다.

 

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

 

  • List<Memo> findAllByUsername(String username);
    • 이렇게 Query Method를 선언했을 경우 ByUsername 에 값을 전달해줘야하기 때문에 파라미터에 해당 값의 타입과 변수명을 선언해줍니다.
    • 즉, Query Methods 는 메서드의 파라미터를 통해 SQL에 필요한 값을 동적으로 받아 처리할 수 있습니다.

 

 

서비스 단에서는 아래와 같은 로직이 필요합니다.

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

 

'Spring > 팀스파르타' 카테고리의 다른 글

25. 인증과 인가란 무엇일까?  (1) 2024.11.12
24. Bean을 수동으로 등록하기  (1) 2024.11.10
22. JPA Auditing  (3) 2024.11.07
21. Spring Data JPA란 무엇일까?  (0) 2024.11.06
20. Spring의 트랜잭션  (1) 2024.11.05