[Spring] MyBatis로 페이징(MySQL)

윤재열·2022년 4월 12일
0

Spring

목록 보기
51/72
post-custom-banner

Mysql로 페이징 처리하는데 공식이 있어서 메모해봅니다.

Criteria클래스(요청페이지)

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}을 쓸 수 있습니다.
}
  • Criteria클래스에 getSkip()메서드를 생성해주어 만약 PageNum이 2이고 size가 10이라고한다면, getSkip()의 리턴값은 (2-1)*10가 되어 10이됩니다.
  • 따라서 쿼리를 작성할 때 limit 10,10이 되어 2번쨰 페이지라는거이 만들어 집니다.

BoardServiceImpl

	@Override
	public List<BoardVO> getList(Criteria criteria) {
		log.info("getList........"+criteria);
		
		return mapper.getListWithPaging(criteria);
	}
	

BoardController

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

BoardControllerTest

@Test
	public void testListPaging()throws Exception {
		
		log.info(mockMvc.perform(MockMvcRequestBuilders.get("/board/list")
				.param("pageNum", "3")
				.param("size", "10"))
				.andReturn().getModelAndView().getModelMap());
		
	}

BoardMapper.xml

<select id="getListWithPaging" resultType="org.zerock.domain.BoardVO">
		select * from tbl_board order by bno desc limit ${skip},${size}
	</select> 
  • MySQL의 limit문은 만약 limit 4,5 라고 한다면 '4번째부터 5개를 출력'이라는 뜻입니다.
profile
블로그 이전합니다! https://jyyoun1022.tistory.com/
post-custom-banner

0개의 댓글