@Query 어노테이션

2023. 8. 15. 01:51
🧑🏻‍💻 pre-project를 진행하다 사용한 @Query에 대한 정리 

 

 

❓ JPA에서 검색 기능을 구현하기 위해 어떤 방식으로 Repository에서 쿼리 메서드를 만들어야 하나 찾아보다가 동적 쿼리에서는 @Query 어노테이션이 유용하게 쓰인다는 것을 알게 되었고 발견한 어노테이션을 사용하고 알게된 내용들을 정리하기로 했다.

 

 

💡 @Query

  • Spring Data JPA에서 사용하는 어노테이션, JPQL 쿼리를 직접 정의할 때 사용되며 복잡한 쿼리나 특수한 조건을 처리할 수 있다. 
    JPQL(Java Persistence Query Language) : 테이블이 아닌 엔티티 객체를 대상으로 검색하는 객체지향 쿼리

  • 동적 쿼리 외에도 아래와 같은 상황에서 유용하게 쓰인다고 한다.
    • 복잡한 쿼리 : 기본 메서드로는 처리하기 어려운 복잡한 쿼리를 작성해야 할 때 사용
    • 특수한 조건 : 특수한 조건에 따른 데이터를 조회하거나 수정해야 할 때 사용
    • 성능 최적화 : 특정 상황에서 성능을 최적화하기 위해 직접 쿼리를 작성해야 할 때 사용 
  • 또한 명시적으로 쿼리를 정의해 줌으로써 가독성과 유지 보수 향상에 도움이 된다. 

  • 예시
@Query("SELECT q FROM Question q WHERE q.title LIKE %?1%")
    List<Question> findByTitleContaining(String title);
    
    
 @Query("SELECT q FROM Question q WHERE " +
           "(:title IS NULL OR q.title LIKE %:title%) " +
           "AND (:name IS NULL OR q.author.name LIKE %:name%)")
    Page<Question> findByTitleAndAuthorNameContaining(@Param("title") String title,
                                                      @Param("name") String name,
                                                      Pageable pageable);

➡️ 위와 같이 조금 더 명시적으로 쿼리를 나타낼 수도 있고  복잡한 조건이나 특정 조인을 다루어야 할 때는 @Query를 사용하여 유연하게 쿼리를 정의할 수 있다. 

 

 

 

➡️ 물론 검색 조건이 더 많아진다면 @Query가 아닌 다른 방법을 사용할 수도 있다. 

  • JPA Specification
  • QueryDsl

하지만 당장 구현하는 게시판은 검색 조건이 다양하거나 복잡하지는 않아서 위 방법은 사용하지 않았다. 기회가 된다면 다음 프로젝트 때 사용해보고 싶긴 하다. 

 

 

 

※ 사용 방법은 아래 참고 

https://www.baeldung.com/spring-data-jpa-query

'Spring > JPA' 카테고리의 다른 글

기본키(Primary Key) 매핑 - @Id, @GeneratedValue  (0) 2023.07.29
쿼리 메서드(Query Method)  (0) 2023.06.28
JPA?  (0) 2023.06.01

BELATED ARTICLES

more