본문 바로가기

WEB/Spring

Paging 구현

<필요 패키지>

org.springframework.data.domain.Page : 페이징을 위한 클래스

org.springframework.data.domain.PageRequest : 현재 페이지와 한 페이지에 보여 줄 게시물 개수 등을 설정하여 페이징을 요청하는 클래스

org.springframework.data.domain.Pageable : 페이징을 처리하는 클래스

 

** JPA 환경을 구축했다면 JPA 라이브러리에 포함되었으니 추가로 설치할 필요는 없다

 

<Repository>

Page<Question> findAll(Pageable pageable);

 

 

Pageable 객체를 받아 Page<Question> 타입 객체 반환하는 findAll 메서드 작성

 

<Service>

public Page<Question> getList(int page){
        Pageable pageable= PageRequest.of(page,10);
        return this.questionRepository.findAll(pageable);
    }

 

PageRequest.of(page,10)은 page는 조회할 페이지, 10은 한 페이지에 보여 줄 게시물의 개수

 

<Controller>

@GetMapping("/list")
    public String list(Model model,@RequestParam(value = "page", defaultValue = "0") int page)
    {
        //List<Question> questionList=this.questionService.getList();
        Page<Question> paging=this.questionService.getList(page);
        model.addAttribute("paging",paging); //Model 클래스를 사용하여 조회한 질문 목록 데이터를 템플릿에 전달
        return "question_list";
    }

 

주소?page=숫자로 원하는 페이지로 이동 가능

 

최신순으로 데이터 조회하기

<Service>

 public Page<Question> getList(int page){
        List<Sort.Order> sorts=new ArrayList<>();
        sorts.add(Sort.Order.desc("createDate"));
        Pageable pageable= PageRequest.of(page,10,Sort.by(sorts));
        return this.questionRepository.findAll(pageable);
    }

 

PageRequest.of의 세번째 매개변수는 Sort 객체이다

작성일시 최신순으로 조회하기 위해 Sort.Order.desc("createDate")로 작성

 

<참고>

https://wikidocs.net/book/7601

'WEB > Spring' 카테고리의 다른 글

UserDetailsService  (0) 2024.02.25
BCryptPasswordEncoder(비크립트패스워드인코더)  (0) 2024.02.24
Validation  (0) 2024.02.22
DTO(Data Transfer Object)  (0) 2024.02.01
Entity에 테이블 맵핑  (0) 2024.01.25