티스토리 뷰
페이징 처리 (쿼리문으로 보기)
[뷰 - Top N분석]
Top N분석 : 조건에 맞는 최상위(최하위) 레코드를 N개 식별해야 하는 경우에 사용
예) 최상위 소득자3명
최근 6개월동안 가장 많이 팔린 제품3가지
실적이 가장 좋은 영업사원 5명
오라클에서 Top N분석원리
- 원하는 순서대로 정렬
- rownum 이라는 가상의컬럼을 이용하여 순서대로 순번부여
- 부여된 순번을 이용하여 필요한수 만큼 식별
- rownum값으로 특정행을 선택할수 없음
(단, Result Set 1st 행(rownum=1)은 선택가능)
--ex10) Top N분석
--급여를 가장많이 받는 사원3명의 이름,급여를 표시하시오
select last_name, salary
from (select last_name, salary from employees order by 2 desc)
where rownum<=3;
--ex11) 최고급여를 받는 사원1명을 구하시오
select last_name, salary, rownum
from (select last_name, salary from employees order by 2 desc)
where rownum=1; -- rownum=1(O), rownum=2(X) 특정행은 선택 불가능 rownum 1만 가능
--ex12) 급여의 순위를 내림차순정렬했을때, 3개씩 묶어서 2번째 그룹을 출력하시오
-- (4,5,6 순위의 사원출력 ceil은 올림!! 3/3 ->1 5/3-> 2!!==> 페이징처리기법)
select employee_id,first_name,salary, page
from(select tt.*, ceil(rownum/3) as page
from (select * from employees order by salary desc) tt) --tt는 가상의 테이블 이름에는 as 안씀
where page=2;
싱글톤 기법을 써서 페이지를 그때그때 계속 가져오지 않아도 되도록
전체 화면에 뿌릴 갯수를 가져오는 게 동시에 일어날 수가 있기 때문에
synchronize 처리를 안하면 틀어져버릴 수 있다. 만약 내가 이 작업을 하는 동안에 대기하고 있어야 되고 보드 페이징 할 때는 위에 데이터 가져오는 작업을 대기해야 한다. 그래서 동기화 처리 해줘야 함(synchronize) -아래-
BoardListService.java
package com.board.service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.board.dao.BoardDAO;
import com.board.dto.BoardDTO;
import com.board.dto.BoardPaging;
import controller.CommandAction;
public class BoardListService implements CommandAction{
@Override
public String requestPro(HttpServletRequest request, HttpServletResponse response) throws Throwable {
//데이터 가져오기
int pg=Integer.parseInt(request.getParameter("pg"));
//select DB
int pageSize=5; // 한 페이지당 출력 게시물 수
int endNum=pg*pageSize; //끝번호
int startNum=endNum-(pageSize-1); // 시작번호
Map<String, Integer>map=new HashMap<>();
map.put("startNum", startNum); // 스타트 넘버는 페이지 당 게시글 수의 시작과 끝을 말함
map.put("endNum", endNum); // (화면에 뿌려줄=출력할 게시글만 가져옴)
BoardDAO dao = new BoardDAO();
List<BoardDTO> list = dao.getBoardList(map); // 현재 화면에 출력할 다섯개 게시물 가져오기
//페이지 처리 (화면처리)
BoardPaging paging = new BoardPaging(pg,3,pageSize);
paging.makePagingHTML();
request.setAttribute("list", list);
request.setAttribute("pg", pg);
request.setAttribute("paging", paging);
return "board/boardList.jsp";
}
}
'JAVA' 카테고리의 다른 글
13_이어서 (0) | 2020.11.26 |
---|---|
step13_boardProject (0) | 2020.11.23 |
웹크롤링/ 이미지보드 프로젝트 (0) | 2020.11.20 |
DB파일올리기2_JSP (0) | 2020.11.20 |
DB에 파일올리기_JSP (0) | 2020.11.20 |
댓글