티스토리 뷰

JAVA

13_이어서

장꾸꾸 2020. 11. 24. 12:29

페이징 처리 (쿼리문으로 보기)

[뷰 - 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
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함