-
JPA JpaRepository 에서 @Query 쿼리작성하여 사용하기(nativeQuery)JPA 2023. 11. 18. 21:25반응형
JPA에서도 마이바티스처럼 어려운 쿼리를 작성하여 사용할 수 있다.
@Query 를 사용하여 여러가지 방법으로 파라미터를 바인딩하여 사용하는 예제다
주의할점은 nativeQuery = true 옵션을 반드시 넣어야한다
1. 파라미터 순서로 바인딩
- 파라미터 순서만 맞으면 된다.
- 쿼리문안에서 파라미터는 순서대로 ?1, ?2, ?3, ... 으로 받는다.
- 가독성이 떨어지고 명확하지않아 비추천방법이다.
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; public interface BoardRepository extends JpaRepository<Board, Integer>{ @Query(value="select jb.* from jpa_board jb where jb.bno = ?1", nativeQuery = true) Board findByBnoWithNameMatch(@Param("bno") int bno); } //SQL 로그 select jb.* from jpa_board jb where jb.bno = 1
2. 이름기반 파라미터 바인딩
- @Param을 사용하여 파라미터와 바인딩할 곳 이름을 맞춘다.
- 쿼리문안에서 파라미터는 :{paramName}으로 받는다.
- 많이 사용하는 방법
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; public interface BoardRepository extends JpaRepository<Board, Integer>{ @Query(value="select jb.* from jpa_board jb where jb.bno = :bno", nativeQuery = true) Board findByBnoWithOrderParam(@Param("bno") int bno); } //SQL 로그 select jb.* from jpa_board jb where jb.bno = 1
3. 컬렉션으 파라미터 바인딩 (여러개)
특정 SQL (IN 절)에 여러가지 파라미터를 사용할때 사용한다.
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; public interface BoardRepository extends JpaRepository<Board, Integer>{ @Query(value="select jb.* from jpa_board jb where jb.bno in :bnos", nativeQuery = true) List<Board> findByBnoWithOrderMultiParam(@Param("bnos") List<Integer> bnos); } //SQL 로그 select jb.* from jpa_board jb where jb.bno in ( 1, 2, 3 )
반응형'JPA' 카테고리의 다른 글