public interface AdminRepository extends JpaRepository<Users,Long>
Page<Users> findAll(Pageable pageable);
Page<Users>는 페이징 정보와 Users 엔티티 리스트를 함께 가지고 있는 객체이다
컨트롤러에서는 이 객체를 다음과 같이 활용할 수 있다
GetMapping("/list")
이번에는 서비스를 변경해보자!
기존 서비스에서는 페이징을 사용하지 않고 모든 사용자 목록을 가져오는 방식으로 구현되어 있었다
//회원 전체 조회 메소드 추가
public List<Users> getAllUsers() {
return usersRepository.findAll();
}
이를 페이징을 추가하여 변경해보았다
public Page<Users> getAllUsers(int page, int size) {
Pageable pageable=PageRequest.of(page,size);
return adminRepository.findAll(pageable);
PageRequest.of(Page,size)는 페이지 번호와 페이지 크기를 지정한다
페이지 번호는 변수로 받고 페이지 크기는 10으로 고정하는 방식을 사용하고 있다
Pageable 객체를 adminRepository.findAll(pageable)에 전달하면 JPA가
페이징 처리된 결과를 Page 타입으로 반환한다
여기서 실수한 점!!(오류가 난 이유)
adminRepository를 새로 생성하였다면 UserSerivce 클래스에도 adminRepository를
주입해야 한다
public class UserService {
private final UsersRepository userRepository;
private final PasswordConfig passwordConfig;
private final AdminRepository adminRepository; // 이 부분 추가
1. 컨트롤러 단계
클라이언트로부터 페이지 번호(page)와 페이지 크기(size)파리미터를 받는다
2. 서비스 단계
컨트롤러로부터 받은 페이지 번호와 크기로 Pageable 객체를 생성한다
Pageable pageable=PageRequest.of(page,size);
Pageable 객체를 리포지터리 매서드에 전달한다
3. 리포지터리 단계
findAll(pageable) 같은 매서드가 Pageable 객체를 받아 데이터 쿼리에 페이징 조건을
추가한다
JPA는 이 정보를 기반으로 SQL의 LIMIT,OFFSET 등을 사용해 해당 페이지에 맞는 데이터만 조회한다
조회 결과와 페이징 정보를 담아 Page 객체를 생성해서 반환한다
4. 컨트롤러 결과 전달