쿼리 작성 방법 전략은 3개가 있다.
- 메서드 이름 분석 방법 : Spring Data JPA 가 쿼리를 작성
- 메서드 부가정보 분석 방법 : JPQL 사용, Native Query 사용시 @Query 어노테이션 속성에 nativeQuery=true
- 정의한 쿼리를 찾아보고 없다면 메서드 이름 분석 : DEFAULT 값, @EnableJpaRepositories 의 queryLookupStrategy 속성에 상수로 지정
// 메서드 이름 분석
public interface CommentRepository extends MyRepository<Comment, Long>{
List<Comment> findByCommentContains(String keyword);
}
// 부가정보 분석
public interface CommentRepository extends MyRepository<Comment, Long>{
@Query("SELECT C FROM COMMENT AS C")
@Query(value = "SELECT * FROM COMMENT",nativeQuery =true )
List<Comment> findAll();
}
@EnableJpaRepositories 의 queryLookupStrategy 속성 전략
- CREATE : 메서드 이름 분석
- USE_DECLARED_QUERY : 메서드 부가정보 분석
- CREATE_IF_NOT_FOUND : DEFAULT 값
@SpringBootApplication
@EnableJpaRepositories(queryLookupStrategy = QueryLookupStrategy.Key.CREATE_IF_NOT_FOUND)
@Import(SoominRegistrar.class)
public class DatajpaApplication {
public static void main(String[] args) {
SpringApplication.run(DatajpaApplication.class, args);
}
}
쿼리를 찾는 방법
저장소 마다 다르나 Spring Data JPA는 @Query, @Procedure, @NamedQuery 순이다.
쿼리를 만드는 방법
- 리턴타입(컬렉션,도메인,Optional, Page, Slice...)
- 접두어 : find, get, query, count, delete, remove ...
- 도입부 : Distinct, First, Top ..
- By
- 프로퍼티 : 엔티티가 참조하는 엔티티의 프로퍼티는 _ 를 사용
- 조건식 : 대소문자구분안함, 범위, 대소 구분, 포함여부 등
- 정렬조건 : OrderBy프로퍼티Asc|Desc
- 매개 변수 : Sort, Pageable( Pageable 은 Sorting 기능까지 포함하고 있으니 참고)
매개값에 Pageable 을 주어도 List<T> 로 받을 수 있으나 Page 도메인이 제공하는 메서드는 사용할 수 없다.
public interface CommentRepository extends MyRepository<Comment, Long>{
List<Comment> findByCommentContains(String keyword);
List<Comment> findDistinctById(Long id, Pageable pageable); //중복제거
}
메서드 작성시 사고의 흐름
- 테스트 코드 작성으로 원하는 쿼리가 작성되는지 확인해야함 ( Spring Data 가 쿼리를 만들 수 없는 경우 Bean을 만들때 부터 에러가 나게 됨 )
- 에러가 없을 경우 테스트코드를 실행하여 생성한 쿼리와 결과 값이 알맞는지 확인
'springframework > Spring Data JPA' 카테고리의 다른 글
Spring Data Common : Async Query Method (0) | 2020.11.16 |
---|---|
Spring Data Common : 쿼리 작성 (0) | 2020.11.15 |
Spring Data Common : Null 처리 (0) | 2020.11.15 |
Spring Data Common : Repository 인터페이스 정의 (0) | 2020.11.15 |
Spring Data Common : Repository (0) | 2020.11.15 |