Repository는 entity에 의해 생성된 db에 접근하는 메서드들을 사용하기 위한 인터페이스 이다.
스프링부트에서는 Entity의 기본적인 CRUD가 가능하도록 JpaRepository 인터페이스를 제공한다.
| method key word | sample | 설명 |
|---|---|---|
| And | findByEmailAndUserId(String email, String userId) | 여러필드를 and 로 검색 |
| Or | findByEmailOrUserId(String email, String userId) | 여러필드를 or 로 검색 |
| Between | findByCreatedAtBetween(Date fromDate, Date toDate) | 필드의 두 값 사이에 있는 항목 검색 |
| LessThan | findByAgeGraterThanEqual(int age) | 작은 항목 검색 |
| GreaterThanEqual | findByAgeGraterThanEqual(int age) | 크거나 같은 항목 검색 |
| like | findByNameLike(String name) | like 검색 |
| IsNull | findByJobIsNull() | null 인 항목 검색 |
| In | findByJob(String … jobs) | 여러 값중에 하나인 항목 검색 |
| OrderBy | findByEmailOrderByNameAsc(String email) | 검색 결과를 정렬하여 전달 |
| method | 설명 |
|---|---|
| long count | 사용가능한 엔티티 수를 반환 한다. |
| void delete | 주언진 엔티티를 삭제한다. |
| void deleteAll | 저장소에서 관리하는 모든 엔티티를 삭제한다. |
| void deleteById | 주어진 ID를 가진 엔티티를 삭제한다. |
| lterabel findAll | T 타입의 모든 인스턴스를 반환한다. |
| Optional findById | ID로 엔티티를 검색한다. |
| S save | 주어진 엔티티를 저장한다. |
| boolean existsById(ID id) | 주어진 ID를 가진 엔티티가 존재하는 지 여부를 반환한다. |

Repository상속 관계는 위그림과 같으며 스프링에서 JpaRepository<>를 상속함으로써 @Transactional 어노테이션을 생략하고 사용할수 있게 된다.
실제 JpaRepository의 메소드들은

다음과 같이 제네릭으로 구현되어 있다. 이를 이용해 위에서 서술한 키워드 규칙으로 여러 쿼리들을 커스텀하여 사용할수 있다.
좀 더 자세한 키워드와 쿼리를 보고 싶다면 JPA 레퍼런스를 참고하면 된다.