오봉이와 함께하는 개발 블로그
스프링 데이터 JPA - 파라미터 바인딩 본문
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
'BE > JPA' 카테고리의 다른 글
스프링 데이터 JPA - 순수 JPA 페이징과 정렬 (0) | 2022.09.13 |
---|---|
스프링 데이터 JPA - 반환 타입 (0) | 2022.09.12 |
스프링 데이터 JPA - @Query(리포지토리 메소드에 쿼리 정의하기, 값, DTO 조회하기) (0) | 2022.09.08 |
스프링 데이터 JPA - JPA NamedQuery (0) | 2022.09.08 |
스프링 데이터 JPA - 메소드 이름으로 쿼리 생성 (0) | 2022.09.08 |
Comments