오봉이와 함께하는 개발 블로그
스프링 데이터 JPA - @Query(리포지토리 메소드에 쿼리 정의하기, 값, DTO 조회하기) 본문
728x90
@Query, 리포지토리 메소드에 쿼리 정의하기
메소드에 JPQL 쿼리 작성
@Query("select m from Member m where m.username = :username and m.age = :age")
List<Member> findUser(@Param("username") String username, @Param("age") int age);
- @org.springframework.data.jpa.repository.Query 어노테이션을 사용
- 실행할 메서드에 정적 쿼리를 직접 작성하므로 이름 없는 Named 쿼리라 할 수 있음
- JPA Named 쿼리처럼 애플리케이션 실행 시점에 문법 오류를 발견할 수 있음(매우 큰 장점!)
실무에서는 메소드 이름으로 쿼리 생성 기능은 파라미터가 증가하면 메서드 이름이 매우 지저분해진다. 따라서 @Query 기능을 자주 사용하게 된다.
@Query, 값, DTO 조회하기
단순히 엔티티에 있는 값을 조회
@Query("select m.username from Member m")
List<String> findUsernameList();
List<String>
으로 Member
에 있는 모든 username
이 담겨서 반환된다.
JPA 값 타입(@Embedded
)도 이 방식으로 조회할 수 있다.
DTO로 직접 조회
@Query("select new study.datajpa.dto.MemberDto(m.id, m.username, t.name) " +
"from Member m join m.team t")
List<MemberDto> findMemberDto();
DTO로 직접 조회 하려면 JPA의 new 명령어를 사용해야 한다.
그리고 다음과 같이 생성자가 맞는 DTO가 필요하다. (JPA와 사용방식이 동일하다.)
@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;
}
}
인프런 김영한 지식공유자님 강의 : 실전! 스프링 데이터 JPA
728x90
'BE > JPA' 카테고리의 다른 글
스프링 데이터 JPA - 반환 타입 (0) | 2022.09.12 |
---|---|
스프링 데이터 JPA - 파라미터 바인딩 (0) | 2022.09.08 |
스프링 데이터 JPA - JPA NamedQuery (0) | 2022.09.08 |
스프링 데이터 JPA - 메소드 이름으로 쿼리 생성 (0) | 2022.09.08 |
스프링 데이터 JPA - 공통 인터페이스 설정, 적용, 분석 (0) | 2022.09.07 |
Comments