[210716금] 페이징
페이징 기법 로직을 처리해야하기 때문에 어렵다 ^^
[순서]
전체 글 개수는 함수를 통해 데이터를 가져옴
한 페이지 10는 final 상수
1번을 누르면 1~10까지 해당하는 글을 디비에서 가져와야 한다.
전체 글 개수에 따른 페이지 개수
int totalPageCount = (totalRecordCount % countPerPage > 0) ? totalRecordCount / countPerPage +1 : totalRecordCount / countPerPage;
logger.info("페이지 개수 : {}", totalPageCount);
모델에 넣어주세요
다음 단계
위에서부터 10개씩 묶어 1페이지 ...
내가 아무것도 요청하지 않아 맨 첫화면에 뜨면 페이지 1
기본값
웹에서 로거를 사용하는 이유는 기록을 남기기 위해!
sysout은 화면에 무조건 출력하기 때문에 노노
링크를 걸때
이 값에 링크를 걸 것이다.
링크가 걸림
정확하게 전달이 되었으면
디폴트값이 아닌 그 숫자가 int current
변수 = 값
listboard 페이지로 current라는 변수, page라는 값을 가지고 간다.
헷갈린 부분
[2교시]
currentPage에 있는 값을 모델에 넣음
연산은 무조건 el 연산자를 사용한다.
밑에 부분은 자바라면 for문 예이다.
링크가 있고 없고의 경우를 for문으로
<span style="color:blue; font-weight:bolder; font-size:1.3">${page}</span>
//current 페이지에 따라서 달라진다. 3p s=21, e=30
int srow = countPerPage * currentPage - 9;
int erow = countPerPage * currentPage;
레파지토리가서 수정
string과 int를 다 받을 수 있는 형태로 Object로 타입을 바꿔줌!!
sql로 고고!
sql 디벨로퍼에서는 동적쿼리 사용 불가
이 한줄이 마이바티스에서 복잡하게 들어간 것이다.
sql을 사용하면 편한데... sql이라 건들일수 없지만
rownum을 이용하면 가져올 수 있지만 모양이 이상
서브쿼리 사용
기존의 테이블을 복사해 b로 이름으로 주고
서브쿼리를 사용해 n은 rownum의 이름
쿼리문 n을 인식을 못해서 아랰쿼리가 오류가 남
rownum 또한 직접 쓰면 동적쿼리이기때문에 노노
3중 서브쿼리 ㄷㄷ
rownum을 안으로 더 집어넣고 where 절을 사용한다.
아래쿼리는 1페이징
2페이징
sql 기능인 rownum을 사용하기 위해서는
바로 그 쿼리문으로는 사용할 수 없어서
안에 넣어 테이블을 하나 만들어 사용해야 한다.
매퍼 xml에서 아래처럼 사용
태그로 인식함
연산자를 아래와 같이 바꿔주고 srow, erow도 바꿔준다.
쿼리문 필요하면 get
SELECT * FROM ( SELECT rownum n, b.* FROM ( SELECT boardnum , userid , title , text , to_char(regdate, 'YYYY-MM-DD') as regdate , hitcount , originalfile , savedfile FROM board WHERE <choose> <when test="searchItem == 'title'">title</when> <when test="searchItem == 'userid'">userid</when> <when test="searchItem == 'text'">text</when> </choose> LIKE '%' || #{searchWord} ||'%' ORDER BY boardnum DESC ) b ) WHERE n >= #{srow} and n <= #{erow}
현재까지는 페이지만 넘어간다.
서치워드와 서치아이템을 같이 넘겨야한다.
모델에 있어야 값을 넘길 수 있다.
첫화면은 리퀘스트파람 디폴트 설정한 값으로 나온다.
값을 가지고 검색을 하면
[과제] 조회수 hitcount
아래와 같이하면 전체글이 update되기 때문에 클릭한 번호에 한해서만 올라간다.
아래는 틀림 수정! 필요
아래처럼 쿼리문은!
컨트롤러 → 레파지토리 → 매퍼.자바 → 매퍼(쿼리 작성)
글자세히 보기 상태에서 새로고침을 하면 조회수가 올라감
이걸 고쳐줘야함!
우리는 여기까지만..
forEach는 나열
[담주에 할 내용]
-첨부파일 저장
-글번호 바꾸기
-아이디 저장 후 다음에 왔을 때도 화면에 뜨게 하기
-댓글 저장
index와 count를 잘 사용하면 되니까 생각해보기