본문 바로가기
Do it 스프링 부트

Do it 스프링 부트 3장

by hoshi03 2024. 1. 29.

내비게이션 바 추가하기

부트스트랩을 사용해서 상단 내비게이션 바 작성하는 방법, 보고 작성하며노딘다

https://wikidocs.net/161986

 

페이징 기능 추가하기

데이터를 여러 페이지에 나눠서 볼 수 있게 페이징 기능을 추가해보자

 

• 대량 테스트 데이터 만들기

페이징 기능을 테스트 하기 위해서는 대량의 테스트 데이터가 필요하다

 

테스트 코드에 반복문으로 더미 데이터 추가했다

@Autowired
    private QuestionService questionService;

    @Test
    void testJpa() {
        for (int i = 1; i <= 300; i++) {
            String subject = String.format("테스트 데이터입니다:[%03d]", i);
            String content = "내용무";
            this.questionService.create(subject, content);
        }
    }

 

 

페이징 구현하기

jpa 관련 라이브러리에 페이징을 위한 패키지가 있으니 그걸 이용해서 페이징을 구현해보자

 

질문 리포지토리에 페이징을 구현 

 

Page<Question> findAll(Pageable pageable);

 

Pagable 객체를 받아서 Page 타입 객체를 리턴한다

 

질문 서비스의 getlist를 기존에는 전부 가져오는 방식에서

아래처럼 Page 타입의 페이지 번호, 가져올 게시물 갯수를 받는 방식으로 변경했다

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

 

컨트롤러도 바뀐 타입에 맞춰서 @RequestParam으로 페이지를 넣어서 url에서 해당 페이지에 맞는 값을 가져오고

그걸 페이지 값으로 전달한다

 @GetMapping("/list")
    public String list(Model model, @RequestParam(value="page", defaultValue="0") int page){
        Page<Question> paging = questionService.getList(page);
        model.addAttribute("paging",paging);
        return "question_list";
    }

 

  • 스프링 부트(Spring Boot)의 페이징 기능을 구현할 때 첫 페이지 번호는 1이 아닌 0이므로 기본값으로 0을 설정해야 한다.
  • GET 방식에서는 값을 전달하기 위해서 ?와 & 기호를 사용한다. 첫 번째 파라미터는 ? 기호를 사용하고 그 이후 추가되는 값은 & 기호를 사용한다.

페이징 객체 속성

 

 

페이지 이동 기능 추가하기

 

스프링 코드는 그대로 두고

qusetion.html에 코드를 수정해서 페이지 이동 기능을 추가했다. 나중에 필요할때 꺼내보자

https://wikidocs.net/162028

 

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

현재는 등록한 순서대로 데이터가 보인다, 하지만 보통은 최신 글 부터 보이는게 일반적이다

데이터 정렬을 created_date 순으로 하면 될 것 같다고 생각하고 강의를 이어서 봤다

 

질문 서비스의 getList 메서드를 수정하는데 Sort,Order나 desc 로 정렬하는 건 처음 봤다.

처음 보는 문법이라 찾아보니 jpa의 정렬 방법 이라고 한다 앞으로 자주 쓸 것 같으니 형태를 외워두자

    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);
    }

 

 

'Do it 스프링 부트' 카테고리의 다른 글

Do it 스프링 부트 2장  (2) 2024.01.07
Do it 스프링 부트 1장  (0) 2024.01.06