내비게이션 바 추가하기
부트스트랩을 사용해서 상단 내비게이션 바 작성하는 방법, 보고 작성하며노딘다
페이징 기능 추가하기
데이터를 여러 페이지에 나눠서 볼 수 있게 페이징 기능을 추가해보자
• 대량 테스트 데이터 만들기
페이징 기능을 테스트 하기 위해서는 대량의 테스트 데이터가 필요하다
테스트 코드에 반복문으로 더미 데이터 추가했다
@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에 코드를 수정해서 페이지 이동 기능을 추가했다. 나중에 필요할때 꺼내보자
최신순으로 데이터 조회하기
현재는 등록한 순서대로 데이터가 보인다, 하지만 보통은 최신 글 부터 보이는게 일반적이다
데이터 정렬을 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 |