본문 바로가기

Spring

"내가 원하는대로 페이징 구현할 수 있을까?"

전체 데이터 조회 vs 10개 데이터 속도 차이


<select id="listAll" resultType="BoardVO">

select bno,title, content,writer,regdate,viewcnt

from tbl_board

order by bno desc, regdate desc

</select>


<select id="listPage" resultType="BoardVO">

select bno,title, content,writer,regdate,viewcnt

from (select bno,title, content,writer,regdate,viewcnt, rownum rn

    from (select bno,title,content,writer,regdate,viewcnt 

   from tbl_board order by bno desc))

where rn between 11 and 20

</select>



Oracle vs MySQL


MySQL

<select id="listPage" resultType="BoardVO">

select bno,title, content,writer,regdate,viewcnt

from tbl_board

order by bno desc, regdate desc

limit 0, 10

</select>


limit 0, 10  → 0:skip수 10:length 글번호:100~91

limit 10,10 → 10:skip수 10:length 글번호:90~81


Oracle

<select id="listPage2" resultType="BoardVO">

select bno,title, content,writer,regdate,viewcnt

from tbl_board

order by bno desc

</select>


BoardImpl.java에서 



스킵할 행수와 조회할 최대행수에 페이지 클릭시 자동으로 값을 넣어줄 수 없을까? 


Criteria.java를 만들어서 URL에 직접 파라미터로 값을 써줘서 넘겨주기

<Controller>

<listCri.jsp>

 눈을 씻고 봐도 Criteria.java 안에 들어갈 page와 perPageNum은 볼 수 없다 그러면 어떻게 값을 전달할까??

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib uri="<http://java.sun.com/jsp/jstl/core>" prefix="c"%>
<%@ taglib prefix="fmt" uri="<http://java.sun.com/jsp/jstl/fmt>"%>
<%@ page session="false"%>

<%@include file="../include/header.jsp"%>

<!-- Main content -->
<section class="content">
	<div class="row">
		<!-- left column -->
		<div class="col-md-12">
			<!-- general form elements -->

			<div class="box">
				<div class="box-header with-border">
					<h3 class="box-title">LIST ALL PAGE</h3>
				</div>
				<div class="box-body">
				
<table class="table table-bordered">
	<tr>
		<th style="width: 10px">BNO</th>
		<th>TITLE</th>
		<th>WRITER</th>
		<th>REGDATE</th>
		<th style="width: 40px">VIEWCNT</th>
	</tr>


<c:forEach items="${list}" var="boardVO">

	<tr>
		<td>${boardVO.bno}</td>
		<td><a href='/board/read?bno=${boardVO.bno}'>${boardVO.title}</a></td>
		<td>${boardVO.writer}</td>
		<td><fmt:formatDate pattern="yyyy-MM-dd HH:mm"
				value="${boardVO.regdate}" /></td>
		<td><span class="badge bg-red">${boardVO.viewcnt }</span></td>
	</tr>

</c:forEach>

</table>

				</div>
				<!-- /.box-body -->
				<div class="box-footer">Footer</div>
				<!-- /.box-footer-->
			</div>
		</div>
		<!--/.col (left) -->

	</div>
	<!-- /.row -->
</section>
<!-- /.content -->
</div>
<!-- /.content-wrapper -->

<script>
    
    var result = '${msg}';
    
    if(result == 'SUCCESS'){
    	alert("처리가 완료되었습니다.");
    }
    
    </script>

<%@include file="../include/footer.jsp"%>


<Criteria.java>

public class Criteria {
	private int page;
	private int perPageNum;
	
	public Criteria() {
		this.page=1;
		this.perPageNum= 10;
	}
	public void setPage(int page) {
		if(page<=0) {
			this.page=1;
			return;
		}
		this.page=page;
	}
	public void setPerPageNum(int perPageNum) {
		if(perPageNum<=0 || perPageNum>100) {
			this.perPageNum=10;
			return;
		}
		this.perPageNum=perPageNum;
	}
	public int getPage() {
		return page;
	}
	public int getPageStart() {
		return  (this.page-1)*perPageNum;
	}
	public int getPerPageNum() {
		return this.perPageNum;
	}
	@Override
	public String toString() {
		return "Criteria [page=" + page + ", perPageNum=" + perPageNum + "]";
	}
}


값 전달 방법 




URL에 직접 입력해준다 좀 더 확대한 사진을 보면 ?page=1&perPageNum=5를 직접 써줬다.







다음 포스팅에는 

실제 데이터 수에 맞춰서 페이지를 생성

해당 번호에 맞는 데이터를 불러오기

글의 제목 클릭시 해당 값을 조회

Go List 버튼을 눌렀을 때 해당 페이지가 나오도록 해볼게요