-
[Spring] @Query, 레포지토리 메소드에 쿼리 정의하기Spring 2021. 12. 22. 15:48
가끔 복잡한 쿼리가 발생했을 경우, 스프링데이터 jpa의 이름정의만으로 구현하기 힘들어질 때가있다.
이 때, 어플리케이션 실행 시점에 문법 오류를 발견할 수 있는 큰 장점을 지니면서 빠르게 구현이 가능한 방법이 있는데 바로 @Query 어노테이션을 활용하는 방법이다.
@Query("select m from Member m where m.username= :username and m.age = :age") List<Member> findUser(@Param("username") String username, @Param("age") int age);
함수단에서 그냥 jpql을 쓰는 것과 구현방법에서 차이가 없지만 차이가 있다면 바로 어플리케이션 실행시점에서 문법오류를 잡아준다는 점이다.
그래서 쿼리가 복잡해지거나 조건이 너무 많아 이름이 길어질 경우 @Query를 이용하여 문제를 많이 해결한다.
@Query는 엔티티를 활용하는 방법 말고도 dto로 직접 조회도 가능한데,
@Query("select new study.datajpa.dto.MemberDto(m.id, m.username, t.name) " + "from Member m join m.team t") List<MemberDto> findMemberDto();
이런식으로 파일의 위치를 직접 잡아주는식으로도 활용 가능하다.
또한 리스트도 파라미터 바인딩이 가능하다.
@Query("select m from Member m where m.username in :names") List<Member> findByNames(@Param("names") List<String> names);
이와 같이 in절을 사용해야할 때 리스트로도 바인딩이 가능하다.
'Spring' 카테고리의 다른 글
[Spring] spring data jpa 페이징과 정렬 (0) 2021.12.25 [Spring] Spring Data JPA 반환타입 정하기 (0) 2021.12.22 [Spring] Spring Data Jpa 메소드 이름으로 쿼리 생성하기 (0) 2021.12.22 [Spring] JPA 중복 컬럼 에러 (0) 2021.12.09 [Spring] 영속성 컨텍스트 (0) 2021.11.29