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);
Member findMemberByUsername(String username); //단건
List<Member> findListByUsername(String username); //리스트
Optional<Member> findOptionalByUsername(String username); //optional
지원하는 반환 타입: 스프링 데이터 JPA 공식 문서
null
이 아님)null
반환Query.getSingleResult()
메서드 호출, 조회 결과가 없으면 javax.persistence.NoResultException
예외가 발생하는데 개발자가 다루기 불편하므로 스프링 데이터 JPA는 예외를 무시하고 null
을 반환해준다.javax.persistence.NonUniqueResultException
예외 발생NonUniqueResultException
를 발생시키지만 스프링 데이터 JPA가 IncorrectResultSizeDataAccessException
로 감싸서 예외 발생 시킴 -> JPA이외에 다른 인프라에서도 예외를 통일시키기 위해서테스트 코드
@Test
void testReturnType_abnormal_input(){
Member memberA = new Member("dongbin",10);
Member memberB = new Member("dongbin",20);
Member memberC = new Member("ehdqls",20);
memberRepository.save(memberA);
memberRepository.save(memberB);
memberRepository.save(memberC);
List<Member> memberList = memberRepository.findListByUsername("1234");
assertNotNull(memberList);
assertThat(memberList.size()).isEqualTo(0);
Member member = memberRepository.findMemberByUsername("1234");
assertNull(member);
assertThrows(IncorrectResultSizeDataAccessException.class, () -> {
Optional<Member> memberOptional = memberRepository.findOptionalByUsername("dongbin");
});
}
예외 테스트 방법 (JUnit 5)
assertThrows([기대하는 예외].class, () -> { [예외가 발생하는 코드] });
"본 포스트는 작성자가 공부한 내용을 바탕으로 작성한 글입니다.
잘못된 내용이 있을 시 언제든 댓글로 피드백 부탁드리겠습니다.
항상 정확한 내용을 포스팅하도록 노력하겠습니다."