티스토리 뷰

Java/jpa

JPA 조회조건 객체 매핑

LichKing 2017. 12. 15. 12:45

JPQL 작성 후 파라미터를 매핑하는 방법은 인덱스에 기반한 방법과 이름에 기반한 방법이 있다.


1. 인덱스 매핑

@Query("SELECT e FROM Expense e WHERE e.id = ?1")
List<Expense> findById(Long id);


spring-data-jpa 를 사용시 id를 이용해 조회하는 쿼리를 자동 생성해주므로 저런식으로 JPQL을 만들필요는 없지만 예제코드임을 기억하자.


이런식으로 인덱스를 사용할 수 있으며 인덱스는 1부터 시작한다. 2번째 파라미터의 경우 ?2 로 매핑해주면 된다.


2. 이름 매핑

@Query("SELECT e FROM Expense e WHERE e.id = :#{#id}")
List<Expense> findById(@Param("id") Long id);


이름 기반 매핑의 경우 @Param에 인자로 전달된 명칭으로 매핑해주면된다. 리팩토링 작업 등으로 인해 파라미터의 순서는 변경될 여지가 크므로 인덱스 매핑보다는 이름 매핑을 사용하는게 당연히 좋다.


3. 객체 매핑

조회조건이 많을 경우 파라미터가 무수히 늘어날 수 있다. 이런 경우 파라미터를 DTO같은 객체에 퉁치고싶은데 이럴땐 어떻게 매핑해야할까


@Query("SELECT e FROM Expense e WHERE e.date BETWEEN :#{#search.start} AND :#{#search.end}")
List<Expense> findByDateBetween(@Param("search") Expense.Search search);


이런식으로 이름기반 매핑을 사용해 매핑해 줄 수 있다.

공유하기 링크
TAG
댓글
댓글쓰기 폼