@Query 를 통해서 값이나 DTO 를 조회하는 방법을 알아보도록 하죠.
public interface MemberRepository extends JpaRepository<Member, Long> {
@Query("select m.username from Member m")
List<String> 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");
}
@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;
}
}
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();
}
findMemberDto()
DTO로 직접 조회 하려면 JPA의 new 명령어를 사용해야 합니다.
그리고 생성자가 맞는 DTO가 필요합니다.
JPA와 사용방식이 동일합니다.