Native Query 란 ?

Legday_Dev·2023년 9월 12일
0

Spring

목록 보기
9/14
post-thumbnail

JPA 를 하다보면 JPQL 을 사용하기 어려운 경우가 있다. JPARepository 를 쓸 때에도 제공되는 메서드외에 따로 사용자가 만들어서 써야할 때가 있다. 이때 Native Query 를 사용하면 된다!!

Native Query 구현 - @Query

  • @Query 안에는 Native Query 뿐 아니라 JPQL 도 사용 가능하다.
  • JPARepository 를 사용한다고 가정하고 쿼리를 짜면된다.
  • @Query 어노테이션 안에서는 JPQL 이 아닌 일반 SQL을 쓰면 value 라는 속성값에다 적어준다. 그리고 쿼리문 다음에 nativeQuery 옵션값에 true 를 적어줘야 한다.
  • 아래 예시는 Insert 문이기 때문에 DB 에 변동을 준다. 이 때 @Modifying 어노테이션을 붙여준다.(UPDATE, DELETE , INSERT 같이 DB 에 영향을 줄 때만 사용)
  • 파라미터 바인딩은 파라미터 위치에 : 를 사용하여 바인딩해준다.
public interface SubscribeRepository extends JpaRepository<Subscribe, Integer> {

    @Modifying 
    @Query(value =
            "INSERT INTO subscribe(fromUserId, toUserId,createdDate) VALUES(:fromUserId, :toUserId, now())",
            nativeQuery = true)
    void mSubscribe(int fromUserId, int toUserId); 
}

Service 코드에서 사용

  • 실제 Service 코드에서는 그냥 메서드를 사용하면 끝이다 !
@RequiredArgsConstructor
@Service
public class SubScribeService {

    private final SubscribeRepository subscribeRepository;

    @Transactional
    public void 구독하기(int fromUserId, int toUserId){
        subscribeRepository.mSubscribe(fromUserId, toUserId);
    }

}
profile
백엔드개발자

0개의 댓글