1 분 소요

메서드에 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. 값 : 단순하게 이름 리스트를 가져오고 싶다..
1
2
@Query("select m.username from Member m")  
List<String> findUserNameList();

그냥 다음과 같이 String List를 넘겨버리면 된다.

  1. 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직접 조회할 때 처럼 사용하면 된다.

다음과 같이 테스트 코드도 잘 작동 하였다.

태그: ,

카테고리:

업데이트:

댓글남기기