- [Spring Data JPA] 파라미터 바인딩2023년 10월 19일 00시 21분 44초에 업로드 된 글입니다.작성자: do_hyuk
포트폴리오 작성을 위해 웹을 만들고 있는 도중 JPA에 회원 이메일을 통해 회원을 조회하고 싶은데 @Query문에 파라미터를 어떤 식으로 작성하는지 몰라 찾아보다 알게 되었다.
스프링 데이터 JPA는 2가지 방법으로 파라미터 바인딩을 지원한다.
- 위치기반
- 이름기반
SELECT m FROM Member m WHERE m.email = ?0 //위치 기반 SELECT m FROM Member m WHERE m.email = :email //이름 기반
스프링 데이터 JPA의 기본값으로는 위치 기반 파라미터 바인딩이다. 이름 그대로 파라미터 순서로 바인딩하는 것이다.
코드 가독성과 유지보수를 위해 위치 기반보다는 이름 기반을 사용하게 한다.
위치 기반은 순서 실수가 있을 수 있기 때문이다.공식 문서를 보면 알 수 있다.
이름 기반 파라미터 바인딩에 대해 알아보자.
/** * 이름 기반 파라미터 바인딩 */ @Query("select m from Member m where m.email = :email") List<Member> findByEmail(@Param("email") String memberEmail);
Email 중복이 안되는데 List <Member>로 한 이유 -> 회원 등록 시 중복된 이메일 사용을 확인하기 위해서
- MemberService에서 MemberRepository.findByEmail(String memberEmail) 호출
- MemberRepository에 findByEmail 메서드에 @Param("email") -> @Query(... = :email)
동작 테스트 @Query에 이름 기반 파라미터 바인딩이 잘 작동한 것을 볼 수 있다.
Java8 이후부터는 자바 컴파일러에 -parameters 옵션을 설정하면 @Param을 생략해도 된다는데 개인적으로는 @Param이 있는 것이 직관적으로 보여서 따로 설정하진 않았다.
'Spring' 카테고리의 다른 글
Spring 이란? (0) 2024.01.03 [Spring Boot] Spring Security & OAuth2.0 사용 - 소셜 로그인 기능 구현하기1 (0) 2023.11.08 [Spring] Spring Security 기본 개념(JWT / OAuth 2.0 / 동작방식 / 구성요소) (0) 2023.11.06 [Spring] EntityNotFoundException 이란? (0) 2023.11.02 [JPA] 매핑 어노테이션 (0) 2023.10.20 댓글