SPRING FRAMEWORK

Spring JPA에서 @Query를 사용하는 방법.

Ambitions 2020. 9. 22. 15:42

Spirng JPA는 EntityRepository를 이용해 CRUD(생성,조회,수정,삭제)를 쉽게 할 수 있게 지원하지만, 떄떄로 개발을 하다보면 서로 연관관계가 없는 테이블을 조인을 통해 핸들링 해야할일이 꽤나 빈번하게 있다.

위와 같은 상황이 발생할 때 고민해볼만한 방법은 QueryDsl를 이용하거나(이 경우는 DTO가 필요) @Query 어노테션을 이용해 sql문을 작성하는 방법이 있는데, 오늘은 @Query 어노테이션을 이용하는 방법을 아주 간단하게 정리하려고 한다.

 

딱히 어려운 부분은 없을 것 같아서 코드로 정리하자면 다음과 같다.

1
2
3
4
5
6
7
8
9
10
// import 생략
// QuerydslPredicateExecutor은 QueryDsl을 사용하기 위해 상속해 둠
public interface Entity extends JpaRepository<Entity, Long>, QuerydslPredicateExecutor<Entity> { 
 
    @Query(value ="select * from entity where id = :#{#param}"// 실행 될 쿼리문 :#{#param} 대신 :param 사용해도 됨 
    List<Entity> result(@Param("param") Long id); // 결과를 담을 데이터형 
    // List<Object[]> result(@Param("param") Long id); // 객체가 담긴 List로 값이 들어오게 할 수 있다.
 
}
 
cs

 여기서 @Param은 :#{param}의 값을 매핑시켜주는 어노테이션으로 두 개의 명칭은 통일시켜야 한다. 사실 위 코드만 봐도 매우 간단하기 때문에 추가적으로 설명할 부분은 없는 것 같고, 위 코드를 참고해서 필요한 순간에 사용하면 좋을 것 같다.