오봉이와 함께하는 개발 블로그

스프링 데이터 JPA - 파라미터 바인딩 본문

BE/JPA

스프링 데이터 JPA - 파라미터 바인딩

오봉봉이 2022. 9. 8. 02:10
728x90

파라미터 바인딩

  • 위치 기반
  • 이름 기반
select m from Member m where m.username = ?0 // 위치 기반
select m from Member m where m.username = :name // 이름 기반

코드 가독성과 유지보수를 위해 이름 기반 파라미터 바인딩을 사용하자. 위치기반은 순서를 실수하면 버그가 생길 수 있다.

이름 기반 파라미터 바인딩

public interface MemberRepository extends JpaRepository<Member, Long> {
    @Query("select m from Member m where m.username = :name")
    Member findMembers(@Param("name") String username);
}

컬렉션 파라미터 바인딩

Collection타입으로 in절을 지원한다.

@Query("select m from Member m where m.username in :names")
List<Member> findByNames(@Param("names") Collection<String> names);

테스트

@Test
void findByNamesTest() {
    Member m1 = new Member("AAA", 10);
    Member m2 = new Member("BBB", 20);
    memberRepository.save(m1);
    memberRepository.save(m2);
    List<Member> result = memberRepository.findByNames(Arrays.asList("AAA", "BBB"));
    for (Member member : result) {
        System.out.println("member = " + member);
    }
}

결과

select
    member0_.member_id as member_i1_0_,
    member0_.age as age2_0_,
    member0_.team_id as team_id4_0_,
    member0_.username as username3_0_
from
    member member0_
where
    member0_.username in (
        ? , ?
    )
member = Member(id=1, username=AAA, age=10)
member = Member(id=2, username=BBB, age=20)

결과를 보면 in절을 사용해서 파라미터를 넣어 쿼리문을 날려줬다.

인프런 김영한 지식공유자님 강의 : 실전! 스프링 데이터 JPA
728x90
Comments