반응형
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가 필요함
반응형