@Test
public void returnType() {
Member m1 = new Member("CCC", 10);
Member m2 = new Member("DDD", 10);
memberRepository.save(m1);
memberRepository.save(m2);
List<Member> members = memberRepository.findListByUsername("AAA");
Member member = memberRepository.findMemberByUsername("AAA");
Optional<Member> findMember = memberRepository.findOptionalByUsername("asdfsdf");
}
위에서 findListByUsername()은 List로 반환하고,
findMemberByUsername은 Member 객체 하나를 반환한다.
만약 두 반환값 모두에서 조회되는 값이 없다면 어떻게 될까??
결론을 먼저 말하자면
사실 Member 객체가 조회된 값이 없을때, 순수 jpa에서는 NoResultException이 터진다. 하지만 Spring data jpa에서는 Exception을 try-catch로 감싸서 null을 리턴 해주도록 만든다.
null을 리턴해주는 것도 Exception이 터지는 것보다는 좋지만, 더 좋은건 Optional을 사용하는 것이다. optional은 조회값이 없을 때, Optional.empty 로 반환한다.
그리고 Optional에 좋은점은 null일때 이렇게 뒤에 코드를 작성할 수 있다는 것이다.
findMember.orElse()
findMember.orElseGet()
📗 참고로, AAA인 사람을 조회하려고 했는데, 여러 사람이 나온다면, NoUniqueResultException 에러가 터진다.
근데 이 에러는 db마다 다르기 때문에 spring이 spring framework exception으로 변환해서 모든 db에서 사용 가능 하게 해준다.
`