A. 일정한 갯수만큼 DB에서 조회
1. 한 페이지에 몇개씩 조회
ex) 10개
2. DB 10개를 조회할 Query문 생성
1) 정렬
SELECT * FROM BANKBOOK WHERE BOOKNUMBER>0 ORDER BY BOOKNUMBER DESC
2) rownum 가상의 컬럼으로 추가
SELECT rownum R, B.* FROM
(SELECT * FROM BANKBOOK WHERE BOOKNUMBER>0 ORDER BY BOOKNUMBER DESC) B
3) R 가상의 컬럼을 이용해서 원하는 수 조회
SELECT * FROM
(SELECT rownum R, B.* FROM
(SELECT * FROM BANKBOOK WHERE BOOKNUMBER>0 ORDER BY BOOKNUMBER DESC) B)
WHERE R between 1 and 10
3. page 번호로 조건식에 사용할 rownum(R)의 값을 계산하는 식 생성
perPage : 한 페이지에 보여줄 Data(row)의 갯수
page : page번호
startRow : rwonum(R) 첫번째 값
lastRow : rwonum(R) 마지막 값
- WHERE R between startRow and lastrow
page startRow lastRow
1 1 10(5)
2 11(6) 20(10)
3 21 30
4 31 40
perPage = 10(5)
startRow = (page-1)*perPage+1
lastRow = page * perPage
--------------------------------------------------------------------------------------------------
MySql
SELECT * FROM BANKBOOK ORDER BY BOOKNUMBER DESC limit ?, ?
Limit 첫번째 ? 값
startRow =(page-1)*perPage;
Limit 두번째 ? 값
perPage
----------------------------------------------------------------------------------------------------
B. JSP에 page 번호 출력
1. 총 row의 갯수 구하기
Long totalCount=410;
2. 총 페이지 갯수 구하기
Long totalPage = totalCount/this.getPerPage();
if(totalCount%this.getPage() != 0) {
totalPage++;
}
3. 한 Block 당 숫자의 갯수
Long perBlock=10;
4. 전체 Block의 갯수 구하기
Long totalBlock=totalPage/perBlock;
if(totalPage%totalBlock != 0) {
totalBlock++;
}
5. page번호로 현재 몇번째 Block인지 계산
- 현재 Block의 시작번호와 끝번호를 계산 준비
1번 : 1 - 10
2번 : 11 - 20
page BLOCK
1 1
2 1
...
9 1
10 1
11 2
20 2
21 3
Long curBlock = this.getPage()/perBlock;
if(this.getPage()%perBlock != 0) {
curBlock++;
}
6. curBlock로 startNum, lastNum 구하기
curBlock startNum lastNum
1 1 10
2 11 20
this.startNum=(curBlock-1)*perBlock+1;
this.lastNum=curBlock*perBlock;
7. 이전, 다음 블럭 유무
- 이전 : 현재 블럭이 1번이면 이전이 없어야 하고 아니면 있어야 한다
- 다음 : 현재 블럭이 마지막이면 다음이 없어야 하고 아니면 있어야 한다
this.pre=false;
if(curBlock>1) {
//현재 block이 2, 3, 4 ....
this.pre=true;
}
this.next=false;
if(totalBlock > curBlock) {
this.next=true;
}
8. 현재 블럭이 마지막 블럭번호와 같다면
if(curBlock == totalBlock) {
this.lastNum=totalPage;
}
검색
- 클라이언트가 검색어를 입력하면 DB에서 검색어가 포함된 row를 찾기
- 검색어를 어떤 컬럼에 찾는지 설정
A. Oracle
'%검색어%'
1. 연결연산자 이용 : '%' || #{search} || '%' => '%' || '검색어' || '%' => '%검색어%'
2. getter 이용 : 앞뒤로 %를 붙여 넣기
//검색어가 없으면 search=null
if(this.search==null) {
this.search="";
}
B. Mysql
1. Concat() 함수 사용 : concat('%', #{search}, '%')