스프링 데이터 JPA - @Query, 리포지토리 메서드에 쿼리 정의하기
메서드에 JPQL 쿼리 작성
MemberRepository.java 에 다음과 같이 메서드를 작성했다.
1
2
@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);
이젠 다 필요 없이 @Query어노테이션 안에 직접 JPQL문을 작성했다.
바로 테스트 해보면 where문이 잘 나가는 걸 볼 수 있다.
@Query에서 정의한 JPQL문은 이름이 없는 NamedQuery라고 할 수 있다. 그래서 컴파일 시점에서 문법 오류가 나왔을 때 이를 바로 알 수 있다.
아무튼 정적인 쿼리는 간단한 건 쿼리 메서드를 사용하고 조금 복잡한 건 @Query를 사용하자.
동적 쿼리는.. QueryDSL..
@Query - 단순 값, DTO 직접 조회
- 값 : 단순하게 이름 리스트를 가져오고 싶다..
1
2
@Query("select m.username from Member m")
List<String> findUserNameList();
그냥 다음과 같이 String List를 넘겨버리면 된다.

- DTO : 내가 원하는 데이터.
1
2
3
4
5
6
7
8
9
10
11
12
13
@Data
public class MemberDto {
private Long id;
private String username;
private String teamName;
public MemberDto(Long id, String username, String teamName) {
this.id = id;
this.username = username;
this.teamName = teamName;
}
}
먼저 다음과 같이 dto를 만들어 주고
리포지토리단에서
1
2
@Query("select new study.datajpa.dto.MemberDto(m.id, m.username, t.name) from Member m join m.team t")
List<MemberDto> findMemberDto();
순수 JPA에서 DTO직접 조회할 때 처럼 사용하면 된다.
다음과 같이 테스트 코드도 잘 작동 하였다.
댓글남기기