- 파라미터 바인딩에는 위치기반 바인딩과 이름 기반 바인딩이 있다
코드 가독성과 유지보수를 위해 이름 기반 파라미터 바인딩을 사용하자. 위치기반은 실수로 위치가 바뀔 경우 큰 문제가 발생할 수 있다.
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);
}
-컬렉션 파라미터 바인딩
Collection타입으로 in 절을 지원한다
@Query("select m from Member m where m.username in :names")
List<Member> findByNames(@Param("names") List<String> names);
-반환 타입
스프링 데이터 JPA는 유연한 반환 타입을 지원한다
List<Member> findByUsername(String name); //컬렉션
Member findByUsername(String name); //단건
Optional<Member> findByUsername(String name); //단건 Optional
List는 찾으려는 객체가 없더라도 빈 객체를 반환하므로 컬렉션은 어떤 상황에서 사용해도 괜찮다
만약 데이터를 조회했는데 데이터가 있을 수도 없을 수도 있을 때 Optional 사용하면 된다
참고: 단건으로 지정한 메서드를 호출하면 jpql의 Query.getSingleResult() 메서드를 호출하는데, 이때 결과가 없으면
javax.persistance.NoResultException 예외가 발생하는데, 이는 개발자 입장에서 다루기가 상당히 불편하다
스프링 데이터 JPA는 단건을 조회할 때 위 예외가 발생해도 예외를 무시하고 대신 null을 반환한다
'Spring > Spring Data JPA' 카테고리의 다른 글
[스프링 데이터 JPA] Auditing (0) | 2022.03.20 |
---|---|
[스프링 데이터 JPA] @EntityGraph (0) | 2022.03.20 |
[스프링 데이터 JPA] 벌크 연산, 스냅샷 (0) | 2022.03.19 |
[스프링 데이터 JPA] 페이징과 정렬 (0) | 2022.03.19 |
[스프링 데이터 JPA] 공통메서드와 쿼리 메소드 3가지, @NamedQuery, @Query (0) | 2022.03.19 |