spring jpa는 유연한 반환 타입을 지원한다.
1. Collection(List)로 반환
: List 및 Collection은 데이터가 없어도 절대 null 이 뜨지 않는다.
empty 컬렉션이 반환이 된다. → size 0으로 찍힘(null 처리 따로 안해줘도됨)
List<Member> findListByUsername(String username); // 컬렉션
/*-------------------------------------------------------*/
// Test Code
@Test
public void returnType() throws Exception{
//given
Member m1 = new Member("AAA", 10);
Member m2 = new Member("BBB", 20);
memberRepository.save(m1);
memberRepository.save(m2);
//when
List<Member> result = memberRepository.findListByUsername("AAA");
//then
assertThat(result.get(0).getUsername()).isEqualTo(m1.getUsername());
}
2. 단건으로 반환
: 단건 조회때는 데이터가 없으면 null을 반환한다. → null 처리가 필요하긴 함
Member findMemberByUsername(String username); // 단건
/*-------------------------------------------------------*/
// Test Code
@Test
public void returnType() throws Exception{
...
Member result = memberRepository.findMemberByUsername("AAA");
...
}
Jpa는 단건을 조회했을때 결과가 없으면 Exception을 던지는데
spring data jpa는 try/catch로 감싸서 굳이 exception을 터트리지 않고
알아서 null로 반환한다.(Optional이 나오기 전에 얘기)
3. Optional 단건 반환
: Optional은 반환값이 null 일 수 있다고 가정하고 시작하기 때문에 반환값이 null 이 나올수 있다면 Optional을 사용해 줘야함!
또한 Optional은 orElse... 등을 사용해서 null 처리 가능하다.
Optional<Member> findOptionalByUsername(String username); // 단건 optional
/*-------------------------------------------------------*/
// Test Code
@Test
public void returnType() throws Exception{
...
Optional<Member> result = memberRepository.findOptionalByUsername("AAA");
...
}
'JAVA' 카테고리의 다른 글
[JAVA] 벌크성 수정 쿼리와 @EntityGraph (0) | 2022.02.23 |
---|---|
[JAVA] Spring data JPA 페이징과 정렬 (1) | 2022.02.17 |
[JAVA] @Query에서 DTO로 조회하기 (0) | 2022.02.15 |
[JAVA] @NamedQuery 와 @Query (0) | 2022.02.15 |
[JAVA] 변경감지와 병합(merge) (0) | 2022.02.10 |