11강(게시글 조회시 목록 페이징 처리 방법)
MySQLPageRequest 클래스에는 MySQL 페이지 요청 정보 및 계산된 값이 들어가게 된다.
Limit, offset 2개 변수는 page, size 정보로 자동으로 계산된 값에 들어가게 된다.
PageRequestParameter 클래스는 pageRequest(페이징 정보), parameter(검색조건 정보) 2가지 정보를 담아 Mybatis에서 사용할 수 있음.
MySQLPageRequestHandleMethodArgumentResolver 클래스는 MySQL 쿼리 페이징 LIMIT, OFFSET에 사용할 값을 자동으로 계산한 값을
MySQLPageRequest 클래스에 담고, Controller에서 받을 수 있다.
현재 페이지 정보, 리스트 개수 가져오고 시작 지점을 계산한다.
계산된 값을 MySQLPageRequest 클래스 생성자에 넘긴다.
WebConfiguration 클래스에 addArgumentResolvers 메소드를 override.
MySQLPageRequestHandleMethodArgumentResolver를 resolvers에 추가.
getList 메소드에 MySQLPageRequest pageRequest를 추가
Mybatis XML에 List 조회시 사용될 파라미터 정보를 Object 또는 Map을 많이 사용함.
강사님 같은 경우 각각 역할에 맞는 데이터를 분리 / 공통 기능 활용하기 위해서 이렇게 사용함.
Service와 repositorty도 바꿔주기
Board.xml getlist 쿼리에 parameterType을 변경
pageRequest와 parameter 두 개가 선언 되었기 때문에 페이징 쿼리 만들기
offset은 변수 이름이고 LIMIT 숫자,숫자로 보면 된다.
Mybatis에서 #{}은 파라미터가 String 형태로 들어와 자동적으로 파라미터 형태가 된다.
1.바로 위 빨간 밑줄 친 LIMIT N ,N의 뜻이 무엇인지 한국어로 적어볼 것.
첫 번째 N은 N번째 행부터 출력한다는 뜻이고 두 번째 N은 N개의 행을 출력한다는 뜻이다.
2.#{pageRequest.limit} #{pageRequest.offset} 이 두 개가 1페이지 2페이지 … 클릭 할 때마다 값이 뭐가 들어가는지 보고 #{pageRequest.limit}가 계산되는 공식이 뭔지 여기에 써 볼 것.
20개씩 출력해서 다섯 페이지를 만든다고 하면
LIMIT 0, 20
LIMIT 20, 20
LIMIT 40, 20
LIMIT 60, 20
LIMIT 80, 20
이런 식으로 값이 들어간다.
그럼 #{pageRequest.limit}에 들어갈 계산식은 (페이지 번호 - 1) * 한번에 출력할 행의 수로 나타낼 수 있다.
기존 쿼리에 parameter를 붙이자.
그리고 실행을 했는데 안된다..
Board.xml에 오타가 있었다.. 오타를 조심하자
사이즈 20으로 1페이지
데이터가 없으니 당연히 null이 뜬다.. 성공.