1️⃣ 요구사항 정리
데이터베이스
- offset / limit : SELECT 쿼리에 적용해서 데이터를 제한 범위에 맞게 조회할 수 있습니다.
페이징
- Pageable : Spring Data JPA에서 제공되는 페이징 관련 인터페이스 입니다.
- PageRequest : Spring Data JPA에서 제공되는 페이지 요청 관련 클래스입니다.
- 일정을 Spring Data JPA의 Pageable과 Page 인터페이스를 활용하여 페이지네이션을 구현
- 페이지 번호와 페이지 크기를 쿼리 파라미터로 전달하여 요청하는 항목을 나타냅니다.
- 할일 제목, 할일 내용, 댓글 개수, 일정 작성일, 일정 수정일, 일정 작성 유저명 필드를 조회합니다.
- 디폴트 페이지 크기는 10으로 적용합니다.
- 일정의 수정일을 기준으로 내림차순 정렬합니다
2️⃣ 주요 코드(페이징)
더보기
(ScheduleController.java)
@RestController
@RequiredArgsConstructor
@RequestMapping("/schedules")
public class ScheduleController {
private final ScheduleService scheduleService;
@GetMapping("/paged")
public ResponseEntity<Page<SchedulePageResponseDto>> findAllSchedulePaged(
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "10") int size
) {
Page<SchedulePageResponseDto> allSchedulePaged = scheduleService.findAllSchedulePaged(page, size);
return new ResponseEntity<>(allSchedulePaged, HttpStatus.OK);
}
}
(ScheduleService.java)
@Service
@RequiredArgsConstructor
public class ScheduleServiceImpl implements ScheduleService {
@Override
public Page<SchedulePageResponseDto> findAllSchedulePaged(int page, int size) {
Pageable pageable = PageRequest.of(page, size, Sort.by(Sort.Direction.DESC, "updatedDate"));
return scheduleRepository.findPagedSchedules(pageable);
}
}
(ScheduleRepository.java)
public interface ScheduleRepository extends JpaRepository<Schedule, Long> {
default Schedule findByIdOrElseThrow(Long scheduleId) {
return findById(scheduleId).orElseThrow(() -> new CustomException(ExceptionCode.SCHEDULE_NOT_FOUND));
}
@Query("""
SELECT new com.example.schedulerjpa.dto.response.SchedulePageResponseDto(
s.title,
s.contents,
a.name,
COUNT(c),
s.createdDate,
s.updatedDate
)
FROM Schedule s
JOIN s.author a
LEFT JOIN Comment c ON c.schedule = s
GROUP BY s
""")
Page<SchedulePageResponseDto> findPagedSchedules(Pageable pageable);
}
📌 GitHub 저장소: https://github.com/sukh115/schedulerJpa/lv8
'SPRING' 카테고리의 다른 글
| [SPRING] 동적 쿼리 (1) | 2025.03.30 |
|---|---|
| [SPRING BOOT + JPA] 일정 관리 앱 회고 (2) | 2025.03.28 |
| [Spring Boot + JPA] LV.7 (1) | 2025.03.28 |
| [Spring Boot + JPA] LV.5+ Lv.6 (1) | 2025.03.28 |
| [Spring Boot + JPA] LV.3 + LV.4 (1) | 2025.03.28 |