일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 자바네트워크
- GIT
- 리눅스
- 코틀린
- kotlin
- 파이썬
- 소프트웨어공학
- python
- 웹 크롤링
- Database
- write by chatGPT
- 자바
- Java
- GPT-4's answer
- oracle
- write by GPT-4
- Spring boot
- android
- 시스템
- 뉴턴역학
- 인프라
- lombok
- NIO
- 고전역학
- 역학
- 유닉스
- chatGPT's answer
- 자바암호
- flet
- JVM
- Today
- Total
Akashic Records
Spring Data JPA, 페이지 및 정렬 본문
PagingAndSortingRepository는 Spring Data JPA에서 페이징 및 정렬 기능을 제공하는 인터페이스입니다. JpaRepository는 PagingAndSortingRepository를 상속하므로, JpaRepository를 사용하면 PagingAndSortingRepository의 기능을 함께 사용할 수 있습니다.
예제를 통해 자세히 살펴보겠습니다.
엔티티 클래스:
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String firstName;
private String lastName;
private String email;
// 생략: 생성자, getter, setter
}
레포지토리 인터페이스:
public interface UserRepository extends JpaRepository<User, Long> {
// 다른 쿼리 메서드 생략
}
서비스 클래스:
@Service
public class UserService {
private final UserRepository userRepository;
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
public Page<User> findAllUsers(Pageable pageable) {
return userRepository.findAll(pageable);
}
}
UserService 클래스에서 findAllUsers 메서드는 Pageable 객체를 매개변수로 받아 페이징 및 정렬 조건에 따라 사용자 목록을 조회합니다. userRepository.findAll(pageable)을 호출하여 페이징 및 정렬 조건을 적용한 사용자 목록을 가져옵니다.
컨트롤러 클래스:
@RestController
@RequestMapping("/users")
public class UserController {
private final UserService userService;
public UserController(UserService userService) {
this.userService = userService;
}
@GetMapping
public ResponseEntity<Page<User>> getUsers(
@RequestParam(required = false, defaultValue = "0") int page,
@RequestParam(required = false, defaultValue = "10") int size,
@RequestParam(required = false, defaultValue = "id,asc") String[] sort) {
List<Sort.Order> orders = new ArrayList<>();
for (String sortOrder : sort) {
String[] _sort = sortOrder.split(",");
orders.add(new Sort.Order(Sort.Direction.fromString(_sort[1]), _sort[0]));
}
Pageable pageable = PageRequest.of(page, size, Sort.by(orders));
Page<User> users = userService.findAllUsers(pageable);
return new ResponseEntity<>(users, HttpStatus.OK);
}
}
UserController 클래스에서 getUsers 메서드는 요청 파라미터를 통해 페이지 번호(page), 페이지 크기(size), 정렬 조건(sort)을 받습니다. PageRequest.of() 메서드를 사용하여 Pageable 객체를 생성하고, userService.findAllUsers(pageable)를 호출하여 페이징 및 정렬 조건을 적용한 사용자 목록을 가져옵니다.
이렇게 PagingAndSortingRepository의 기능을 사용하면 간단한 설정만으로 데이터 조회에 페이징 및 정렬 기능을 적용할 수 있습니다.
페이징 및 정렬을 테스트할 수 있는 API 요청:
페이징 및 정렬 조건을 적용한 사용자 목록을 조회하는 API를 테스트해봅시다. 다음과 같은 요청을 사용하여 원하는 페이지 번호, 페이지 크기, 정렬 조건에 따라 사용자 목록을 조회할 수 있습니다.
예시:
첫 번째 페이지, 페이지 크기 10, id 기준 오름차순 정렬:
GET /users?page=0&size=10&sort=id,asc
두 번째 페이지, 페이지 크기 5, 이름(firstName) 기준 내림차순 정렬:
GET /users?page=1&size=5&sort=firstName,desc
정렬 조건에 여러 열(column) 사용하기:
여러 열에 대해 정렬 조건을 지정하려면 sort 파라미터에 여러 개의 정렬 조건을 전달하면 됩니다.
첫 번째 페이지, 페이지 크기 10, 이름(firstName) 기준 오름차순 정렬 후, 이메일(email) 기준 내림차순 정렬:
GET /users?page=0&size=10&sort=firstName,asc&sort=email,desc
이와 같이 PagingAndSortingRepository를 사용하면 페이징 및 정렬 기능을 쉽게 구현할 수 있습니다. 요청 파라미터를 통해 페이지 번호, 페이지 크기, 정렬 조건을 전달하면 Pageable 객체를 생성하여 이를 메서드에 전달할 수 있습니다. 이를 통해 데이터 조회 결과를 클라이언트에게 효율적으로 제공할 수 있습니다.
'Spring.io' 카테고리의 다른 글
Spring Data JPA , FetchType (0) | 2023.04.12 |
---|---|
Spring Data JPA, @OneToMany 무한 반복 오류 (0) | 2023.04.12 |
Spring Data JPA @Query 어노테이션 (0) | 2023.04.10 |
Spring Data JPA (0) | 2023.04.10 |
Spring Data JPA에서 findBy.. 규칙 (0) | 2023.04.10 |