개요
이번 글에서는 JPA NativeQuery 사용시 @Param으로 객체를 사용하는 방법에 대해 이야기해보려고 한다.
@Param으로 객체를 넘기면 좋은 점?
일반적으로 @Param 사용 시 아래 코드와 같이 일일이 파라미터를 매개변수로 넣어줘야 한다.
@Modifying
@Query(value = "INSERT INTO member (user_id, user_pw) VALUES (:userId, :userPw)", nativeQuery = true)
@Transactional
void saveMemberInfo(@Param("userId") String userId, @Param("userPw") String userPw);
또한 쿼리에 필요한 파라미터가 많으면 많아질수록 넣어줘야 하는 매개변수의 양도 많아진다.
이는 반복적이고 매개변수가 잘못된 위치에 들어갈 수 있는 상황도 초래할 수 있다.
위와 같은 이유로 매개변수로 하나의 객체만 넣어줄 수 있다면 더 좋은 코드를 작성할 수 있는 것이다.
@Param으로 객체 사용하기
@Modifying
@Query(value = "INSERT INTO member (user_id, user_pw) VALUES (:#{#member.userId}, :#{#member.userPw})", nativeQuery = true)
@Transactional
void saveMemberInfo(@Param("member") Member member);
@Query를 통해 사용하는 쿼리문의 파라미터를 기존에는 :파라미터명으로 사용해 줬다면 객체를 통해 파라미터를 주입할 땐 :#{#파라미터명.프로퍼티명}의 방식을 사용한다.
위 방식을 통해 일일이 파라미터를 넣는 방식을 피하고, 빌더 패턴을 통한 객체 생성으로 매개변수로 넘겨주는 좋은 방식의 코드를 채택할 수 있다.