Spring/JPA

Spring Data JPA - DTO 직접 조회

묠니르묘묘 2022. 4. 15. 21:47

조회하는 것은 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가 필요해서 아래와 같이 생성자를 만든 것이다.

 

MemberDto 클래스

클래스 위치가 study.datajpa.dto 패키지 안에 있다.

그래서 아까 쿼리에 위치를 적어놓은 것이다.

 

 

그렇다면 이제 테스트를 해보자

Team 타입의 teamA, teamB, teamC 를 생성하고

Member 타입의 m1, m2, m3를 생성하고 그 안에 각 Team을 넣는다.

그리고 전부 저장한다음에 우리가 만들어놨던 findMemberDto()메서드를 사용하여 DTO로 조회하면 된다.

 

조회한 다음 List로 반환받았으니 foreach문으로 하나씩 꺼내서 조회하여 보면 아래 출력문처럼 나오게 된다.

참고로 @Data 라는 롬복을 사용하여서 @toString 롬복이 자동으로 지정되었기에 저렇게 출력이 나온다.

toString 메서드를 Override 하지 않고 쓰면 클래스 안의 값들이 출력되지 않는다.