스프링데이터 JPA[쿼리 메서드] - @Query 어노테이션 사용법

2021. 2. 6. 21:28JPA/SPRING DATA JPA

@Query

  • JPQL을 정의할 수 있는 어노테이션

1. JPA의 @NamedQuery에 정의된 쿼리를 정의하여 사용할 수 있다.

@Entity
@NamedQuery(name="Member.findAll", query="select m from Member m")
public class Member {
 ...
}

public interface MemberRepository extends JpaRepository<Member, Long> {

	@Query(name = "Member.findAll")
	List<Member> findAll();
}

위 예제와 같이 NamedQuery의 이름과 레퍼지포리의 메서드 이름이 같은 경우 @Query 어노테이션 생략 가능.

 

2. 컬럼 리스트 조회하기

@Query("select m.username from Member m")
List<String> findUsernameList();

 

3. DTO로 조회하기

@Query("select new study.datajpa.repository.MemberDto(m.id, m.username, t.name) from Member m join m.team t")
List<MemberDto> findMemberDto();

주의! DTO로 직접 조회 하려면 JPA의 new 명령어를 사용해야 한다. 그리고 다음과 같이 생성자가 맞는 DTO가 필요하다. (JPA와 사용방식이 동일하다.)

 

4. 파라미터 바인딩 - @Param

import org.springframework.data.repository.query.Param

public interface MemberRepository extends JpaRepository<Member, Long> {

 	@Query("select m from Member m where m.username = :name")
	Member findMembers(@Param("name") String username);
 
}