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}의 값을 매핑시켜주는 어노테이션으로 두 개의 명칭은 통일시켜야 한다. 사실 위 코드만 봐도 매우 간단하기 때문에 추가적으로 설명할 부분은 없는 것 같고, 위 코드를 참고해서 필요한 순간에 사용하면 좋을 것 같다.
'SPRING FRAMEWORK' 카테고리의 다른 글
@Transient 어노테이션 사용해보기 (0) | 2021.01.15 |
---|---|
개발중 발생했던 @Autowired 관련 이슈 정리 (1) | 2021.01.07 |
스프링 부트(Spring boot) + 그레들(Gradle) 개발 환경설정 (0) | 2020.07.06 |
JPA annotation @DynamicUpdate? (0) | 2020.05.07 |
JPA의 엔티티에서의 카운팅(@Formula) (0) | 2020.05.03 |