
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, () -> { [예외가 발생하는 코드] });
"본 포스트는 작성자가 공부한 내용을 바탕으로 작성한 글입니다.
잘못된 내용이 있을 시 언제든 댓글로 피드백 부탁드리겠습니다.
항상 정확한 내용을 포스팅하도록 노력하겠습니다."