ssung_항해일지/항해99_실전 프로젝트

실전 프로젝트 - 9일차

ssungcohol 2023. 3. 19. 00:52

메인 페이지에 책에 대한 정보를 표출해 주어야하는 과정에서 원했던 방식은 랜덤하게 몇 개만 DB에서 가지고 와서 프론트에 표출해주는 것이었는데, 머리로는 어떻게 하면 되겠다 라는 생각을 했지만 구현하지 못했다.

 

생각했던 방향은 컨트롤러에서 main 페이지를 호출해주고 service 에서 메소드를 실행하면, repository를 통해 책의 id 를 가지고 온 뒤 랜덤하게 반환해주고, 그 반환된 id 를 가지고 타임리프를 통해 원하는 값을 매칭해주면 되겠다!

였는데 막상 들어가서 해보려니 아무것도 하지못했다. (추후에 꼭 다시 해봐야겠다.)

 

결국 이것저것 찾아보면서 따라해본 방법은 타임리프를 통한 페이징 방법!

 

방법은 Pageable 인터페이스를 사용한 방법이라고한다.

 

Thymeleaf를 사용해 구현해보자!

1. Pageable를 사용해 컨트롤러 구현

@GetMapping("/main")
	public String bookList(Model model, @PageableDefault(page=0,size=10, sort = "id",
	direction = Sort.Direction.DESC) Pageable pageable) {

	model.addAttribute("list", boardService.boardList(pageable));

		return "main";
	}
  • Pageable 인터페이스를 통해 페이징 정보를 설정 할 수 있음
    • page = 현재 페이지로 인덱스 0부터 시작
    • size = 한 페이지 당 허용되는 데이터의 개수
    • sort = 정렬 조건
    • direction = 내림차순, 오름차순
  • pageable을 매개변수로 사용해 요청이 오면 JpaRepository는 그에 해당하는 pageable 객체를 자동으로 만들어 줌

2. 서비스 구현

	public Page<Book> bookList(Pageable pageable) {
		return bookRepository.findAll(pageable);
	}

3. Repository 설정

public interface BookRepository extends JpaRepository<Book, Long> {
	List<Book> findAll();
}

4. 페이지 블럭을 view로 넘겨주기 위한 컨트롤러 작성

	@GetMapping("/main")
	public String bookList(Model model, @PageableDefault(page=0,size=10, sort = "id",
	direction = Sort.Direction.DESC) Pageable pageable) {

		Page<Book> list = bookService.bookList(pageable);

		int nowPage = list.getPageable().getPageNumber() + 1;
		int startPage = Math.max(nowPage -4, 1);
		int endPage = Math.min(nowPage + 9, list.getTotalPages());

		model.addAttribute("list", list);
		model.addAttribute("nowPage", nowPage);
		model.addAttribute("startPage", startPage);
		model.addAttribute("endPage", endPage);

		return "main";
	}
  • int nowPage = list.getPageable().getPageNumber() + 1; - 현재 페이지를 나타내는 변수로 페이지 index가 0부터 시작하기에 +1을 해줌
  • int startPage = Math.max(nowPage -4, 1); - 현재 페이지에서 가장 앞에 페이지 번호를 보여줄 변수 (max 함수를 사용하는 이유=> 현재페이지에서 -4를 해줬을 때 1보다 작은 수가 나오면 안되기에 1 또는 현재페이지 -4를 했을 때 더 큰 값을 쓰기 위해 사용)
  • int endPage = Math.min(nowPage + 9, list.getTotalPages()); - 현재 페이지에서 가장 뒤에 페이지 번호를 보여줄 변수 (min 함수 사용 이유 => 해당 번호가 넘어가버리면 안되기 때문. 페이지가 11까지 있을 때 현재 페이지가 3이라면 12까지 보이기 때문에 최소값을 구하는 방식으로 진행)

 

728x90

'ssung_항해일지 > 항해99_실전 프로젝트' 카테고리의 다른 글

실전 프로젝트 - 12일차  (0) 2023.03.21
실전 프로젝트 - 11일차  (0) 2023.03.20
실전 프로젝트 - 8일차  (0) 2023.03.17
실전 프로젝트 - 7일차  (0) 2023.03.16
실전 프로젝트 - 5일차  (0) 2023.03.15