레아Leah 2021. 7. 16. 09:23
반응형

페이징 기법 로직을 처리해야하기 때문에 어렵다 ^^ 

 

[순서]

전체 글 개수는 함수를 통해 데이터를 가져옴 

한 페이지 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> &nbsp; 

 

 

//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 &gt;= #{srow} and n &lt;= #{erow}

 

 

현재까지는 페이지만 넘어간다. 

서치워드와 서치아이템을 같이 넘겨야한다. 

모델에 있어야 값을 넘길 수 있다. 

첫화면은 리퀘스트파람 디폴트 설정한 값으로 나온다.

 

값을 가지고 검색을 하면

 

 

[과제] 조회수 hitcount

 

아래와 같이하면 전체글이 update되기 때문에 클릭한 번호에 한해서만 올라간다.

아래는 틀림 수정! 필요

아래처럼 쿼리문은! 

컨트롤러 → 레파지토리 → 매퍼.자바 → 매퍼(쿼리 작성)

 

 

 

 

글자세히 보기 상태에서 새로고침을 하면 조회수가 올라감

이걸 고쳐줘야함! 

우리는 여기까지만.. 

 

forEach는 나열 

 

 

 

[담주에 할 내용]

-첨부파일 저장

-글번호 바꾸기 

-아이디 저장 후 다음에 왔을 때도 화면에 뜨게 하기

-댓글 저장

index와 count를 잘 사용하면 되니까 생각해보기

 

반응형