WEB/기타
[JPA] 4. Repository
silverline79
2024. 1. 23. 19:47
4. Repository
Repository
Spring Data 저장소 추상화의 중심 인터페이스,
관리할 도메인 클래스와 도메인 클래스의 ID 유형을 유형 인수로 사용
주로 작업할 유형을 캡처하고 이 인터페이스를 확장하는 인터페이스를 검색하는 데도움이 되는 마커 인터페이스 역할
CrudRepository : CRUD 기능 제공
PagingAndSortingRepository : 페이징 및 레코드 정렬을 수행하는 방법을 제공
JpaRepository : 지속성 컨텍스트 플러시 및 일괄 처리 레코드 삭제와 같은 JPA 관련 메소드 제공
※ 일반적으로 정렬 및 페이징이 필요한지 여부에 따라 CrudRepository 또는
PagingAndSortingRepository 를 사용하는 것이 가장 좋습니다 .
Repositories |
https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#preface |
Interface Repository<T,ID> |
https://docs.spring.io/spring-data/commons/docs/current/api/org/springframework/data/repository/Repository.html |
Interface CrudRepository<T,ID> |
https://docs.spring.io/spring-data/commons/docs/current/api/org/springframework/data/repository/CrudRepository.html |
Interface PagingAndSortingRepository<T,ID> |
https://docs.spring.io/spring-data/commons/docs/current/api/org/springframework/data/repository/PagingAndSortingRepository.html |
◆ CrudRepository인터페이스
public interface CrudRepository<T, ID> extends Repository<T, ID> { <S extends T> S save(S entity); Optional<T> findById(ID primaryKey); Iterable<T> findAll(); long count(); void delete(T entity); boolean existsById(ID primaryKey); // … more functionality omitted .} |
<S extends T> S save(S entity); | 주어진 엔티티를 저장 |
Optional<T> findById(ID primaryKey); | 지정된 ID로 식별되는 엔터티를 반환 |
Iterable<T> findAll(); | 모든 엔터티를 반환 |
long count(); | 엔터티 수를 반환 |
void delete(T entity); | 지정된 엔티티를 삭제 |
boolean existsById(ID primaryKey); | 주어진 ID를 가진 엔터티가 있는지 여부를 나타냄 |
◆ PagingAndSortingRepository 인터페이스
public interface PagingAndSortingRepository<T, ID> extends CrudRepository<T, ID> { Iterable<T> findAll(Sort sort); Page<T> findAll(Pageable pageable); } |
◆ JpaRepository 인터페이스
JpaRepository는 CRUD처리를 위한 공통 인터페이스
JpaRepository를 extends하여 아래와 같이 인터페이스를 생성
public interface MemberRepository extends JpaRepository<Member, Long>{} |
Spring Data JPA에서 제공하는 JpaRepository 인터페이스를 상속하기만 해도 되며,인터페이스에 따로 @Repository등의 어노테이션을 추가할 필요가 없다.
JpaRepository를 상속받을 때는 사용될 Entity 클래스와 ID 값이 들어가게 된다.extends JpaRepository<엔티티 클래스이름 , ID 필드 타입>
JpaRepository를 단순하게 상속하는 것만으로 위의 인터페이스는 Entity 하나에 대해서 아래와 같은 기능을 제공
method | 기능 |
save() | 레코드 저장 (insert, update) |
findOne() | primary key로 레코드 한건 찾기 |
findAll() | 전체 레코드 불러오기. 정렬(sort), 페이징(pageable) 가능 |
count() | 레코드 갯수 |
delete() | 레코드 삭제 |