JPA/SPRING DATA JPA
스프링데이터 JPA[쿼리 메서드] - @Query 어노테이션 사용법
YoonBing9
2021. 2. 6. 21:28
@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);
}