본문 바로가기

카테고리 없음

[Spring Data JPA] Query Methods - @Query 어노테이션을 이용한 쿼리 직접 정의

반응형

스프링 데이터 JPA가 제공하는 쿼리 메소드 기능 중 @Query 어노테이션을 이용한 쿼리 직접 정의에 대해 알아보자. 

 

스프링 데이터 JPA가 제공하는 쿼리 메소드 기능 
  1. 메소드 이름으로 쿼리 생성
  2. 메소드 이름으로 JPA NamedQuery 호출
  3. @Query 어노테이션을 이용한 쿼리 직접 정의

 

@Query 어노테이션을 이용한 쿼리 직접 정의
  • @Query 어노테이션을 사용해서 리파지토리 인터페이스 메소드에 쿼리 직접 정의하는 것이다. 
  • @org.springframework.data.jpa.repository.Query 어노테이션을 사용

 

메소드 이름 vs. @Query 쿼리 생성 비교 

메소드 이름으로 쿼리 생성 

public interface MemberRepository extends JpaRepository<Member, Long> {
	List<Member> findByUsernameAndAgeGreaterThan(String username, int age);
}

메소드 이름으로 쿼리 생성할 경우 파라미터가 늘어날 수록 너무 길어진다는 단점을 지닌다.

 

@Query 어노테이션을 이용한 쿼리 직접 정의

public interface MemberRepository extends JpaRepository<Member, Long> {
	@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);
}

실행할 메서드에 정적 쿼리를 직접 작성하므로 이름 없는 Named 쿼리라 할 수 있다.

 

장점

  • 복잡한 JPQL을 해결할 수 있다. 
  • 애플리케이션 로딩 시점에 문법 오류를 발견할 수 있다. 

 

 

참조 - 자바 ORM 표준 JPA 프로그래밍

반응형