Part 13. MyBatis와 스프링에서 페이징 처리
13.2 BoardController와 BoardService 수정
- 페이징 처리는 브라우저에서 들어오는 정보들을 기준으로 동작하기 때문에 BoardController와 BoardService 역시 전달된느 파라미터들을 받는 형태로 수정해야 한다.
13.2.1 BoardService 수정
- BoardService는 Criteria를 파라미터로 처리하도록 BoardService 인터페이스와 BoardServiceImpl 클래스를 수정한다.
< BoardSerivce 인터페이스 - Criteria를 파라미터로 처리하도록 수정 >
package org.zerock.service;
import java.util.List;
import org.zerock.domain.BoardVO;
import org.zerock.domain.Criteria;
public interface BoardService {
public void register(BoardVO board);
public BoardVO get(Long bno);
public boolean modify(BoardVO board);
public boolean remove(Long bno);
// public List<BoardVO> getList();
public List<BoardVO> getList(Criteria cri);
}
- 동일 패키지 내의 BoardServiceImpl 클래스도 수정한다.
< BoardServiceImpl 클래스 수정 >
// @Override
// public List<BoardVO> getList() {
//
// log.info("getList.......");
//
// return mapper.getList();
// }
@Override
public List<BoardVO> getList(Criteria cri) {
log.info("get List with criteria: " + cri);
return mapper.getListWithPaging(cri);
}
- 원칙적으로는 BoardService 쪽에 대한 수정이 이루어졌으니 이에 대한 테스트를 진행한다.
- 메서드를 수정하면 이미 테스트 코드 역시 에러가 발생하므로 다음과 같이 수정해 테스트를 진행한다.
< src/test/java 밑의 BoardServiceTests 클래스 >
@Test
public void testGetList() {
// service.getList().forEach(board -> log.info(board));
service.getList(new Criteria(2,10)).forEach(board -> log.info(board));
}
13.2.2 BoardController 수정
- 기존 BoardController의 list()는 아무런 파라미터가 없이 처리되었기 때문에 pageNum과 amount를 처리하기 위해 아래와 같이 수정한다.
< BoardController 클래스 >
@GetMapping("/list")
public void list(Criteria cri, Model model) {
log.info("list: " + cri);
model.addAttribute("list", service.getList(cri));
}
- Criteria 클래스를 하나 만들어 두면 위와 같이 편하게 하나의 타입만으로 파라미터나 리턴 타입을 사용할 수 있기 때문에 여러모로 편리하다.
- BoardController 역시 이전에 테스트를 진행했으므로, pageNum과 amount를 파라미터로 테스트한다.
< src/test/java 밑의 BoardControllerTests 클래스 >
@Test
public void testListPaging() throws Exception {
log.info(mockMvc.perform(
MockMvcRequestBuilders.get("/board/list")
.param("pageNum", "2")
.param("amount", "50"))
.andReturn().getModelAndView().getModelMap());
}