1. Repository 인터페이스
@Indexed
public interface Repository<T, ID> { }
- Spring Data의 중심 인터페이스입니다.
마커 인터페이스
- 타입 정보 포착 및 식별에 활용 (구체적 메서드 X)
- 확장 인터페이스 식별 및 추적
Spring Data JPA 와의 연계
- Spring Data JPA는 Repository 인터페이스를 인식하여, 개발자가 필요로 하는 CRUD 작업의 구현체를 자동으로 제공합니다.
타입 인자
- T: 도메인 클래스
- ID: 도메인 클래스의 식별자 타입
2. CrudRepository와 ListCrudRepository 인터페이스
- 관리되는 엔터티 클래스에 대해 고급 CRUD 기능을 제공합니다.
- 개발자는 이 인터페이스를 확장함으로써 엔터티에 대한 기본 CRUD 작업을 쉽게 수행할 수 있는 메소드를 얻게 됩니다.
CrudRepository
public interface CrudRepository<T, ID> extends Repository<T, ID> {
<S extends T> S save(S entity); (1)
Optional<T> findById(ID primaryKey); (2)
Iterable<T> findAll(); (3)
long count(); (4)
void delete(T entity); (5)
boolean existsById(ID primaryKey); (6)
// … more functionality omitted.
}
ListCrudRepository
@NoRepositoryBean
public interface ListCrudRepository<T, ID> extends CrudRepository<T, ID> {
<S extends T> List<S> saveAll(Iterable<S> entities);
List<T> findAll();
List<T> findAllById(Iterable<ID> ids);
}
findAll()
- List 로 반환합니다. (Iterable X)
특정 영속성 기술을 위한 추상화
- CrudRepository를 확장하여 특정 영속성 기술에 대한 추상화를 제공합니다.
JpaRepository
- JPA를 사용하는 애플리케이션을 위한 추가 기능 제공
- 영속성 컨텍스트와의 상호작용을 도움: flush(), saveAndFlush(), deleteInBatch()
- PagingAndSortingRepository 확장
JPAQueryFactory
스크롤링
- 큰 결과 세트를 작은 청크로 나누어 반복적으로 가져오는 방식 (대규모 데이터 세트를 효율적으로 처리)
- 메모리 사용량 관리 + 성능 최적화
(JPA) Paging
public interface MemberRepository extends JpaRepository<Member, Long> {
Page<Member> findByAgeGreaterThan(int age, Pageable pageable);
}
Pageable pageable = PageRequest.of(0, 50); // 첫 번째 페이지, 페이지 크기 50
Page<Member> page;
do {
page = memberRepository.findByAgeGreaterThan(18, pageable);
for (Member member : page.getContent()) {
// member 객체 처리 로직
}
pageable = page.nextPageable(); // 다음 페이지 요청
} while (page.hasNext());
쿼리 메서드
interface UserRepository extends CrudRepository<User, Long> {
long countByLastname(String lastname);
long deleteByLastname(String lastname);
List<User> removeByLastname(String lastname);
}
- count 및 delete에 대한 쿼리 유도 가능합니다.
3. PagingAndSortingRepository 인터페이스
@NoRepositoryBean
public interface PagingAndSortingRepository<T, ID> extends Repository<T, ID> {
Iterable<T> findAll(Sort sort);
Page<T> findAll(Pageable pageable);
}
- 엔티티에 대한 페이징 및 정렬을 용이하게 하는 메서드를 제공합니다.
PagingAndSortingRepository<User, Long> repository = // … get access to a bean
Page<User> users = repository.findAll(PageRequest.of(1, 20));
- 조건에 대한 페이징 결과를 반환받을 수 있습니다.
출처
'Spring > Spring Data JPA' 카테고리의 다른 글
[자바 ORM 표준 JPA 프로그래밍] 3. 영속성 관리 (0) | 2023.11.28 |
---|---|
[자바 ORM 표준 JPA 프로그래밍] 2. JPA 시작 (0) | 2023.11.28 |
[자바 ORM 표준 JPA 프로그래밍] 1. JPA 소개 (0) | 2023.11.28 |
[Spring Data JPA] 2-2. Transactionality (0) | 2023.10.18 |
[Spring Data JPA] 2-1. Configuration (0) | 2023.10.18 |