Page (페이징)
주로 Spring Data JPA 에서 사용되는 인터페이스
페이징 처리는 데이터베이스에서 많은 데이터를 한번에 불러오지 않고, 필요한 크기만큼 나누어 가져오는 방식
Page와 Pageable
1. Page
- 페이징된 데이터를 담고있는 객체
- 페이징 처리된 데이터와 함께, 전체 데이터의 크기, 페이지 정보 등을 제공
2. Pageable
- 페이징 요청 정보를 담고있는 객체
- 현재 페이지 번호, 페이지 크기(한페이지에 몇개의 데이터) 등을 설정하여 페이징 요청에 사용됨
주요 메서드
데이터 관련 메서드
1. getContent()
- 현재 페이지의 데이터리스트를 반환
2. getTotalElements()
- 전체 데이터 개수를 반환
3. getTotalPages()
- 전체 페이지 수를 반환
4. getNumber()
- 현재 페이지 번호를 반환 (0부터 시작)
페이징 상태 관련 메서드
1. isFirst()
- 현재 페이지가 첫번째 페이지인지 확인
2. isLast()
- 현재 페이지가 마지막 페이지인지 확인
3. hasNext()
- 다음 페이지가 있는지 확인
4. hasPrevious()
- 이전 페이지가 있는지 확인
예제
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
@Entity
public class Member {
@Id
private Long id;
private String name;
// Getter, Setter, Constructor 생략
}
repository
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
public interface MemberRepository extends JpaRepository<Member, Long> {
Page<Member> findByNameContaining(String name, Pageable pageable);
}
Spring Data JPA 의 JpaRepository 를 사용할때, 페이징 처리를 자동으로 지원함
- findByNameContaining : 이름에 특정 문자열이 포함된 데이터를 검색
- Pageable : 페이징 정보(현재페이지, 페이지크기) 를 전달
service
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;
@Service
public class MemberService {
@Autowired
private MemberRepository memberRepository;
public Page<Member> getPagedMembers(String name, int page, int size) {
// PageRequest.of(page, size)로 Pageable 객체 생성
return memberRepository.findByNameContaining(name, PageRequest.of(page, size));
}
}
controller
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class MemberController {
@Autowired
private MemberService memberService;
@GetMapping("/members")
public Page<Member> getMembers(
@RequestParam String name,
@RequestParam int page,
@RequestParam int size
) {
return memberService.getPagedMembers(name, page, size);
}
}
페이징 api 호출
GET /members?name=John&page=0&size=5
결과
{
"content": [
{ "id": 1, "name": "John Doe" },
{ "id": 2, "name": "Johnny Appleseed" }
],
"pageable": {
"sort": { "sorted": false, "unsorted": true },
"pageNumber": 0,
"pageSize": 5,
"offset": 0,
"paged": true
},
"totalPages": 10,
"totalElements": 50,
"last": false,
"first": true,
"size": 5,
"number": 0,
"numberOfElements": 2,
"empty": false
}
Page와 Pageable 정리
1. Page
- 데이터베이스에서 페이징 처리된 결과를 담고 있는 객체
- 데이터 리스트와 함께 페이지 정보(전체 개수, 현재 페이지 등)를 제공
2. Pageable
- 페이징 요청 정보를 담고 있는 객체
- PageRequest.of(페이지 번호, 페이지 크기)로 생성 가능
3. 주요 기능
- 페이징 처리: 데이터를 원하는 페이지 크기만큼 나누어 가져옴
- 정렬 처리: 페이징과 함께 정렬 조건도 설정 가능
4. 사용 시 장점
- 대량의 데이터를 효율적으로 처리
- 필요한 데이터만 가져와 성능 최적화
출처 : ChatGPT
'BE > Spring & Spring Boot' 카테고리의 다른 글
[Spring Boot] Validation 유효성 검사 (0) | 2024.12.30 |
---|---|
[Spring Boot] Thymeleaf 타임리프 (0) | 2024.12.29 |
[Spring Boot, Java] Cascade (0) | 2024.12.26 |
[Spring Boot, JPA] 스냅샷 (1) | 2024.12.25 |
[Spring Boot, JPA] 영속성 컨텍스트 (0) | 2024.12.24 |