스프링

오라클  PLSQ 로  데이터 삽이

    

DECLARE
? i number :=1;
??
? begin?
? ? while i <= 567 loop
? ? ?insert into board (idx, userid, subject, content, ref) values
? ? ?( (select nvl(max(idx)+1, 1) from board) , 'braverokmc', '제목은', '내용' ,
? ? ?( select nvl(max(idx)+1, 1) from board ) );
? ? ?i :=i+1 ;
? end loop ;

end;?

commit;


??
?
select idx, userid, username, subject, hit, post_date, rn
?
from
??? ?(
?? ?select A.*, rownum as rn
?? ? from
?? ?(
?? ??? ?select b.IDX , b.USERID, m.username, b.SUBJECT, b.HIT, b.POST_DATE ? from board b, tbl_member m
?? ??? ?
?? ??? ?where ?b.userid =m.userid
?? ??? ?order by idx desc
?? ?) A

)
?where ?rn BETWEEN 0 and 10;


sql 에서 from 절이 제일 먼저 인식 된다는 점을 착안해서 rownum 에 
다시 from 절을 돌려 데이터를 뽑고 다시 rownum 을 찍어서 순서대로 번호를 가져올 수 있다.

이것은 MYSQL 에서 

select * from board limit 0 and 10;

과 같다.


페이지 나누기 


한폐이지에 10개의 레코드 출력
전체 게시물 수 : 게시물수 561개
전체 페이지 갯수 : 총 561/10 => 56.1=> 57페이지 (올림 처리)


1 ~ 5 |   6 ~ 10  | 11 ~ 15 | ..... | 56 ~ 57
1블록      2블록         3블록                 12블록

페이지 블록 갯수 : 57페이지 / 5페이지 블록 => 11.4 =>12 개 블록

현재 페이지 번호 : 1페이지 1 ~ 10

                  2 페이지  11 ~ 20
                  
                  9페이  81 ~ 90
                
    레코드 시작 번호 = (현재 페이지 - 1) * 10 +1
                    ex) 1페이지  : (1-1) *10 + 1 => 1            
                    ex) 2페이지  : (2-1) *10 + 1 => 2
    
    레코드 마지막 번호 =시작번호 + (10 -1)
                1페이지 : 1 + (10 -1)  =>10
                     
                     

1 2 3 4 5 [다음]

[이전 ] 6 7 8 9 10 [다음]

[이전 ] 11 12 13 14 15 [다음]

[이전 ] 56 57

                     


     

public class PageDAO {

?? ?public static final int PAGE_SCALE ?=10; ? //페이지 개당 게시물
?? ?public static final int BLOCK_SCALE =10; ?// 블록당 페이지 수
?? ?private int curPage; ?//현재 페이지 번호
?? ?private int prevPage; //이전 페이지
?? ?private int nextPage; //다음 페이지
?? ?private int totPage; //전체 페이지 갯수
?? ?private int curBlock; // 현재 페이지 블록 번호
?? ?private int totBlock; // 전체 페이지 블록 갯수
?? ?private int pageBegin; //페이지 내에서 레코드 시작 번호
?? ?private int pageEnd; //페이지 내에서 레코드 끝 번호
?? ?private int blockStart; //페이지 블록 내에서의 시작 페이지 번호
?? ?private int blockEnd; // 페이지 블록 내에서의 마지막 페이지 번호
?? ?
?? ?
?? ?
?? ?public PageDAO(int count, int curPage){

?? ??? ?curBlock =1; // 현재 페이지 블록은 1로 설정
?? ??? ?this.curPage =curPage; // 현재 페이지 번호 설정
?? ??? ?setTotPage(count); // 전체 페이지 갯수 설정
?? ??? ?setPageRange(); //현재 페이지 시작번호 , 끝번호 계산
?? ??? ?setTotBlock(); //전체 페이지 블록 계산
?? ??? ?setBlockRange(); //현재 페이지 블록의 시작 페이지, 끝 페이지 번호 계산
?? ?}

?? ?
?? ?
?? ?public int getCurPage() {
?? ??? ?return curPage;
?? ?}
?? ?public void setCurPage(int curPage) {
?? ??? ?this.curPage = curPage;
?? ?}
?? ?public int getPrevPage() {
?? ??? ?return prevPage;
?? ?}
?? ?public void setPrevPage(int prevPage) {
?? ??? ?this.prevPage = prevPage;
?? ?}
?? ?public int getNextPage() {
?? ??? ?return nextPage;
?? ?}
?? ?public void setNextPage(int nextPage) {
?? ??? ?this.nextPage = nextPage;
?? ?}
?? ?public int getTotPage() {
?? ??? ?return totPage;
?? ?}
?? ?
?? ?
?? ?//전체 페이지 갯수 계산 ?count 는 레코드 갯수 567 개
?? ?public void setTotPage(int count) {
?? ?//Math.ceil(숫자) =>소수 올림 처리, 5.1 =>6?? ?
? ?// 567 /10 => 56.7?? ??? ?
?? ??? ?totPage=(int)Math.ceil(count*1.0/PAGE_SCALE);
?? ?}
?? ?
?? ?
?? ?
?? ?public int getCurBlock() {
?? ??? ?return curBlock;
?? ?}
?? ?public void setCurBlock(int curBlock) {
?? ??? ?this.curBlock = curBlock;
?? ?}
?? ?public int getTotBlock() {
?? ??? ?return totBlock;
?? ?}
?? ?public void setTotBlock(int totBlock) {
?? ??? ?this.totBlock = totBlock;
?? ?}
?? ?public int getPageBegin() {
?? ??? ?return pageBegin;
?? ?}
?? ?public void setPageBegin(int pageBegin) {
?? ??? ?this.pageBegin = pageBegin;
?? ?}
?? ?public int getPageEnd() {
?? ??? ?return pageEnd;
?? ?}
?? ?public void setPageEnd(int pageEnd) {
?? ??? ?this.pageEnd = pageEnd;
?? ?}
?? ?public int getBlockStart() {
?? ??? ?return blockStart;
?? ?}
?? ?public void setBlockStart(int blockStart) {
?? ??? ?this.blockStart = blockStart;
?? ?}
?? ?public int getBlockEnd() {
?? ??? ?return blockEnd;
?? ?}
?? ?public void setBlockEnd(int blockEnd) {
?? ??? ?this.blockEnd = blockEnd;
?? ?}

?? ?//전체 페이지 블록 계산
?? ?/* 1 ~ 5 | ? 6 ~ 10 ?| 11 ~ 15 | ..... | 56 ~ 57
?? ? ? 1블록 ?? ? 2블록 ?? ??? ?3블록 ?? ??? ??? ??? ?12블록
?? ?
?? ?페이지 블록 갯수 : 57페이지 / 5페이지 블록 => 11.4 =>12 개 블록
?? ?*/
?? ?
?? ?private void setTotBlock() {
?? ??? ?totBlock =(int)Math.ceil(totPage/BLOCK_SCALE);
?? ?}
?? ?
?? ?//현재 페이지 시작번호 , 끝번호 계산 ?오라클 ?where ?rn BETWEEN 1(pageBegin) and 10(pageEnd);
?? ?private void setPageRange() {
?? ??? ?pageBegin =(curPage -1) * PAGE_SCALE +1;
?? ??? ?pageEnd =pageBegin + PAGE_SCALE -1;
?? ??? ?
?? ?}

?? ?//현재 페이지 블록의 시작 페이지, 끝 페이지 번호 계산
?? ?private void setBlockRange() {
? ? ? //현재 페이지가 몇번째 페이지 블록에 속하는지 계산?? ?
?? ? ? curBlock=(int)Math.ceil((curPage-1)/BLOCK_SCALE)+1;
?? ? ??
?? ? ? blockStart=(curBlock -1) * BLOCK_SCALE+1; //시작 번호
?? ? ? blockEnd=blockStart+BLOCK_SCALE -1; // 끝번호
?? ? ? if(blockEnd > totPage){ ?// 마지막 페이지가 범위를 초과할 경우
?? ??? ? ?//[이전 ] 56 57 58 59 ?60 ?=> 57 이후 날려 버린다.
?? ??? ? ?// => [이전 ] 56 57 ?
?? ??? ? ? blockEnd=totPage;
?? ? ? }
?? ? ? //현재 블록이 1이면 이전 페이지를 1로 설정
?? ? ? prevPage= curBlock ==1 ? 1 : (curBlock-1)*BLOCK_SCALE;
?? ? ? //현재 블록이 마지막 블록이면 다음 페이지를 마지막 페이지 번호로 설정
?? ? ? nextPage= curBlock > totBlock ? (curBlock*BLOCK_SCALE) :(curBlock * BLOCK_SCALE) +1;
?? ? ? //마지막 페이지가 범위를 초과하지 않도록 처리
?? ? ? if(nextPage >= totPage){
?? ??? ? ? nextPage =totPage;
?? ? ? }
?? ?}
?? ?
?? ?
}

-------------------------------------------------------------------------------------------------------------

   
  

 ?@RequestMapping(value="/board_list.do", method=RequestMethod.GET)
?? ?public String board_list(@RequestParam(defaultValue="1") int curPage, ?Model model){
?? ??? ?
?? ??? ?//페이지 총 개수 가져오기?? ??? ??? ?
?? ??? ?int count =boardService.pageTotalCount();
?? ??? ?
?? ??? ?PageDAO ?pageDao =new PageDAO(count, curPage);
?? ??? ?
?? ??? ?int start =pageDao.getPageBegin();
?? ??? ?int end =pageDao.getPageEnd();
?? ??? ?
?? ??? ?model.addAttribute("list", boardService.boardList(start, end));
?? ??? ?model.addAttribute("page", pageDao);
?? ??? ?
?? ??? ?return "board/board_list";
?? ?}
??

-------------------------------------------------------------------------------------------------------------------

 

  <div class="pagination">
	  <ul>
	  <c:if test="${ page.curPage > 1}">
	  	  	<li><a href="/board/board_list.do?curPage=1">[시작]</a></li>
	  </c:if>
	  
	   <c:if test="${ page.curBlock > 1 }">
	   	<li><a href="/board/board_list.do?curPage=${page.prevPage }">&laquo;</a></li>
	   </c:if>
	       
	  <c:forEach  begin="${ page.blockStart }" end="${ page.blockEnd }" step="1"  var="pageNum">	 
		<c:choose>
		  <c:when test="${ param.curPage == pageNum }">
		       <li class="active">
	  	 	<a href="/board/board_list.do?curPage=${pageNum}" style="background:#E85356; color:white; ">${pageNum }</a>
	  	 		</li>
		  </c:when>
		  <c:otherwise>
		       <li>
	  	 	<a href="/board/board_list.do?curPage=${pageNum}">${pageNum }</a>
	  	 		</li>
		  </c:otherwise>
		</c:choose>
		
	  </c:forEach>
	 	 
	 	<c:if test="${page.curBlock <= page.totBlock }" >
	 		<li><a href="/board/board_list.do?curPage=${page.nextPage}">&raquo;</a></li>
	 	</c:if>   
	  
	  <!-- 마지막 페이지 -->
	  <c:if test="${page.curPage < page.totPage}">
	    <li><a href="/board/board_list.do?curPage=${page.totPage }">[끝]</a></li>
	  </c:if>
	    
	    
	  </ul>
  </div>

--------------------------------------------------------------------------------------------------------------------------------

 

 

spring

 

about author

PHRASE

Level 60  머나먼나라

여론이 항상 법률을 앞선다. -고리키

댓글 ( 4)

댓글 남기기

작성

스프링 목록    more