공부/JPA

Spring Data JPA - @Query, 값, DTO 조회하기

데부한 2022. 7. 30. 14:36
반응형

출처 : 인프런 실전! 스프링 데이터 JPA

Spring Data JPA 게시글은 대부분 인프런의 김영한님의 강의인 '실전! 스프링 데이터 JPA' 기반으로 내용을 정리했습니다.

 

@Query, 값, DTO 조회하기

단순히 값 하나 조회

여태 엔티티 위주로 조회를 했는데 그럼 엔티티에 들어있는 필드 하나, 즉 기본 타입으로 데이터를 조회하려면?

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

    List<String> result = memberRepository.findUsernameList();
    for (String s : result) {
        System.out.println("s = " + s);
    }
}
select
    member0_.username as col_0_0_ 
from
    member member0_
s = AAA
s = BBB

 

 

DTO로 직접 조회

  • DTO  생성
@Data // getter, setter가 다 들어가 있으므로 실무에선느 사용 X
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;
    }
}
  • MemberRepository.interface
@Query("select new study.datajpa.dto.MemberDto(m.id, m.username, t.name)from Member m join m.team t")
List<MemberDto> findMemberDto();
  • MemberRepositoryTest.class
@Test
public void findMemberDto() {

    Team team = new Team("teamA");
    teamRepository.save(team);

    Member m1 = new Member("AAA", 10);
    m1.setTeam(team);
    memberRepository.save(m1);

    List<MemberDto> memberDto = memberRepository.findMemberDto();
    for (MemberDto s : memberDto) {
        System.out.println("s = " + s);
    }
}
! DTO로 직접 조회 하려면 JPA의 new 명령어를 사용해야 한다. 그리고 다음과 같이 생성자가 맞는 DTO가 필요함

 

반응형