조회하는 것은 Entity만 가능 한 것이 아니다!!
DTO도 조회가 가능하다.
먼저 아래 코드처럼 @Query를 사용하여 레포지토리 메서드에 쿼리를 정의하자.
위 쿼리를 살펴보면 select에 new study.datajpa.dto.MemberDto가 적혀져 있다.
이것은 패키지 구조를 적어놓은 것인데 아래 MemberDto 클래스의 package 위치를 살펴보자.
그리고 조회하고 싶은 DTO 생성자를 적어야한다.
우리가 조회하려는 것은 Member 와 Member의 Team을 조인한 테이블에서
Member의 id와 username
Team의 name을 DTO에 담아서 조회할 것이다.
당연히 조건없이 조회하기에 여러 행을 조회할 수 있으므로 List로 반환한다.
DTO로 직접 조회하려면 JPA의 new 명령어를 사용해야 하기에 생성자가 맞는 DTO가 필요해서 아래와 같이 생성자를 만든 것이다.
클래스 위치가 study.datajpa.dto 패키지 안에 있다.
그래서 아까 쿼리에 위치를 적어놓은 것이다.
그렇다면 이제 테스트를 해보자
Team 타입의 teamA, teamB, teamC 를 생성하고
Member 타입의 m1, m2, m3를 생성하고 그 안에 각 Team을 넣는다.
그리고 전부 저장한다음에 우리가 만들어놨던 findMemberDto()메서드를 사용하여 DTO로 조회하면 된다.
조회한 다음 List로 반환받았으니 foreach문으로 하나씩 꺼내서 조회하여 보면 아래 출력문처럼 나오게 된다.
참고로 @Data 라는 롬복을 사용하여서 @toString 롬복이 자동으로 지정되었기에 저렇게 출력이 나온다.
toString 메서드를 Override 하지 않고 쓰면 클래스 안의 값들이 출력되지 않는다.
'Spring > JPA' 카테고리의 다른 글
deleteAll() vs deleteAllInBatch() (1) | 2022.07.17 |
---|---|
Spring Data JPA - 파라미터 바인딩 (0) | 2022.04.18 |
Spring Data JPA - 쿼리 메서드 기능 (0) | 2022.04.14 |
Spring Data JPA (0) | 2022.04.13 |
JPA 객체지향 쿼리 언어 소개 (0) | 2022.04.05 |