Mysql로 페이징 처리하는데 공식이 있어서 메모해봅니다.
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@ToString
public class Criteria {
private int pageNum; //페이지 번호
private int size; //한 페이지당 출력 DATA 개수
public Criteria(){
this(1,10);
}
public Criteria(int pageNum,int size) {
this.pageNum=pageNum;
this.size=size;
}
public int getSkip() {
return this.pageNum = (pageNum-1) * size;
}
//이 getSkip을 통해 mapper.xml에서 ${skip}을 쓸 수 있습니다.
}
@Override
public List<BoardVO> getList(Criteria criteria) {
log.info("getList........"+criteria);
return mapper.getListWithPaging(criteria);
}
@Controller
@Log4j
@RequestMapping("/board/*")
@RequiredArgsConstructor
public class BoardController {
private final BoardService service;
@GetMapping("/list")
public void list(Model model,Criteria criteria) {
log.info("list 메서드 시작");
model.addAttribute("list",service.getList(criteria));
}
}
@Test
public void testListPaging()throws Exception {
log.info(mockMvc.perform(MockMvcRequestBuilders.get("/board/list")
.param("pageNum", "3")
.param("size", "10"))
.andReturn().getModelAndView().getModelMap());
}
<select id="getListWithPaging" resultType="org.zerock.domain.BoardVO">
select * from tbl_board order by bno desc limit ${skip},${size}
</select>
limit 4,5
라고 한다면 '4번째부터 5개를 출력'이라는 뜻입니다.