QueryMethod1 / 패스트캠퍼스 챌린지 05일차

망고쥬스·2021년 11월 5일
0

Service에서 활용하는 복잡한 Where조건을 가지는 쿼리를 학습해보자

UserRepository.java

public interface UserRepository extends JpaRepository<User,Long>{
	User findByName(String name);
    }

UserRepositoryTest.java (UserRepository상속)

@Test
void select(){
	System.out.println(userRepository.findByName("martin"));
    }

-> 기존 테이블의 "martin"이름을 가진 2개의 컬럼이 존재한다.
-> user단일객체가 조회가 되야 하는데 2개 이상에 데이터가 들어가 있기 때문에 에러가 발생된다.


  • 수정: UserRepository.java
  • 단일객체가 아닌 Optional에 담아 값을 여러개을 담을 수 있게 해준다.
public interface UserRepository extends JpaRepository<User,Long>{
	Optional<User> findByName(String name);
    }

List, Set. Iterator, Option, Stream, Future,Page, Mono, Flux 등도 사용이 가능하다.
즉, 쿼리메서드에서는 리턴타입을 고정해서 사용하는 것이 아닌 개발자가 정의하는데로 리턴 타입에 맞춰 반환해주게 된다.


Query Subject Keywords

find...By : DB에 Select를 조회 (일반적으로 가장 많이 사용) / findByEmail 등
get...By
read...By
query...By
search...By
stream...By
등 모두 DB에서 select절을 통해 데이터를 찾아올 수 있다.

UserRepositoryTest.java (UserRepository상속)

@Test
void select(){
	System.out.println(userRepository.findByName("martin"));
    System.out.println(userRepository.getByName("martin"));
    System.out.println(userRepository.readByName("martin"));
    System.out.println(userRepository.queryByName("martin"));
    System.out.println(userRepository.searchByName("martin"));
    System.out.println(userRepository.streamByName("martin"));
    System.out.println(userRepository.findSomthingByName("martin"));
    //다 같은 결과물을 출력하게 된다.
    }

findByName에서 "Name"부분은 Entity의 프로퍼티 이름과 동일해야 오류없이 찾을 수 있다.
findByById같은경우도 런타임 오류가 발생하게 된다.

그 외 count...By 는 갯수를 파악해서 리턴해준다.
delete...By는 삭제처리를 해준다.
exists...By는 존재하는지 확인하고 불대수값을 리턴해준다.


#패스트캠퍼스 #패캠챌린지 #직장인인강 #직장인자기계발 #패스트캠퍼스후기 #한번에끝내는Java/Spring웹개발마스터초격차패키지Online

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

https://bit.ly/3FVdhDa

profile
#newbieDeveloper #since 2021.04.06

0개의 댓글