위치 기반? 이름 기반?

파라미터 바인딩에는 위치 기반과 이름 기반이 있습니다.

select m from Member m where m.username = ?0 //위치 기반
select m from Member m where m.username = ?0 //위치 기반

하지만 위치 기반은 거의 사용하지 않습니다.

그냥 이름 기반을 사용합시다. 코드 가독성이나 유지 보수를 위해서 가급적이면 이름 기반을 사용해야 합니다.

위치 기반은 위치가 바뀌는 순간 버그가 생길 수 있습니다.

파라미터 바인딩

import org.springframework.data.repository.query.Param

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

컬렉션 파라미터 바인딩

import org.springframework.data.repository.query.Param

public interface MemberRepository extends JpaRepository<Member, Long> {
    
    @Query("select m from Member m where m.username in :names")
		List<Member> findByNames(@Param("names") List<String> names);
    
}
  1. Collection 타입으로 in절 지원