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());
	}
profile
한 걸음 한 걸음 나아가는 개발자

0개의 댓글