반환 타입

스프링 데이터 JPA는 유연한 반환 타입을 지원합니다.

컬렉션, 단건, 옵셔널 모두 지원합니다.

List<Member> findListByUsername(String name); //컬렉션

Member findMemberByUsername(String name); //단건

Optional<Member> findOptionalByUsername(String name); //단건 Optional

만약 findListByUsername() 이 한 건이라는게 보장되면 List<Member> 가 아니라 Member 로 받아도 됩니다.

마찬가지로 findMemberByUsername() 도 List<Member> 로 받을 수 있는 것이죠.

@Test
void returnType() {
    Member m1 = new Member("AAA", 10);
    Member m2 = new Member("BBB", 20);
    memberRepository.save(m1);
    memberRepository.save(m2);

    List<Member> result1 = memberRepository.findListByUsername("AAA");
    Member result2 = memberRepository.findMemberByUsername("AAA");
    Optional<Member> result3 = memberRepository.findOptionalByUsername("AAA");

    assertThat(result1).hasSize(1)
            .extracting("username", "age")
            .containsExactlyInAnyOrder(
                    tuple("AAA", 10)
            );
    assertThat(result2)
            .extracting("username", "age")
            .contains("AAA", 10);
    assertThat(result3.get())
            .extracting("username", "age")
            .contains("AAA", 10);
}

조회 결과가 많거나 없으면?

<aside> ❗ 추가적인 반환 타입 공식문서


https://docs.spring.io/spring-data/jpa/reference/repositories/query-return-types-reference.html#appendix.query.return.types

</aside>

Referece