@Query 를 통해서 값이나 DTO 를 조회하는 방법을 알아보도록 하죠.

단순히 값 하나를 조회

public interface MemberRepository extends JpaRepository<Member, Long> {

		@Query("select m.username from Member m")
		List<String> findUsernameList();
		
}
  1. findUsernameList()
@Test
void findUsernameList() {
    Member m1 = new Member("AAA", 10);
    Member m2 = new Member("BBB", 20);
    memberRepository.save(m1);
    memberRepository.save(m2);

    List<String> usernames = memberRepository.findUsernameList();

    assertThat(usernames.get(0)).isEqualTo("AAA");
    assertThat(usernames.get(1)).isEqualTo("BBB");
}

DTO로 직접 조회

@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;
    }

}
  1. DTO 에 값을 넣기 위해서 생성자가 필요합니다.
public interface MemberRepository extends JpaRepository<Member, Long> {

		@Query("select new study.datajpa.dto.MemberDto(m.id, m.username, t.name) from Member m join m.team t")
    List<MemberDto> findMemberDto();
		
}
  1. findMemberDto()

  2. jpql 조인

  3. DTO로 직접 조회 하려면 JPA의 new 명령어를 사용해야 합니다.

    그리고 생성자가 맞는 DTO가 필요합니다.

    JPA와 사용방식이 동일합니다.