Spring MyBatis - paging

S.Sun·2024년 4월 16일

스프링

목록 보기
10/17

질문 내용

  1. 페이징을 위한 sql 쿼리를 설명하시오.
  2. 페이징을 위한 변수 7개를 정리 하시오.
  3. rownum 에 대하여 설명하시오.
  4. 쿼리의 순서에 대하여 설명하시오.
  • FROM
  • WHERE
  • GROUP BY
  • HAVING
  • ORDER BY
  1. 아래의 쿼리에서 아무것도 나오지 않는 이유는?
    select rownum rn, bid, bname, btitle from mvc_board where rownum > 10 and rownum<=20;
  2. 부트스트랩으로 pagination을 적용해 보세요.
  3. 부트스트랩을 적용하여 게시판을 만드시오. (http://49.247.158.208:9999/hjs) 참고

개인 작성

        	select * from 
        	(
			    select
			        rownum rnum , A.*
			    from 
			    (select
			     * 
		    	 from mvc_board order by bgroup desc, bstep asc) A 
		    	where rownum <= 10 
		    )
			where rnum > 0
  • 3중 쿼리로 작성됨.

  • 1번째로 실행되는 쿼리 : 테이블 내 게시판 목록을 정렬하여 뽑아놓기

select * from mvc_board order by bgroup desc, bstep asc
  • 2번째로 실행되는 쿼리 : 뽑아놓은 게시판 목록에 조건 1 넣기
select rownum rnum , A.* from (...) A where rownum <= 10 
  • 3번째로 실행되는 쿼리 : 뽑아놓은 게시판 목록에 조건 2 넣기
select * from (...) where rnum > 0
  • 이와 같은 과정을 거치는 이유는 DB에서 SQL 처리할 때 순서가 정해져 있기 때문이다.
	private int startPage; // 화면에 보여지는 페이지 시작 번호
	private int endPage; // 화면에 보여지는 페이지 끝 번호

	private boolean prev; // 이전으로 이동 가능한 링크 표시
	private boolean next; // 다음으로 이동 가능한 링크 표시
	private int total; // 전체 게시판 수
	private int pageNum; // 페이지 번호
	private int amount; // 한 페이지당 보여줄 데이터 개수
  • rownum : 조회 후 순번을 매길 때 사용
    - 기본적으로 1부터 시작
    - 기존 테이블의 primary key로 설정되어 있는 번호를 활용할 수는 없는 이유
    -> 게시판에서는 삭제 기능을 제공하기 때문.

  • from(+join) : 조회할 테이블을 지정. (+ Join을 실행하여 하나의 가상 테이블로 결합)

  • where : 조건에 맞는 데이터를 필터링

  • group by : 선택한 칼럼을 기준으로 조회한 레코드 목록을 그룹화함.

  • having : 그룹핑 후에 각 그룹에 사용되는 조건 절
    - where절에도 사용할 수 있다면, where에 사용해야 함. 퍼포먼스가 떨어지기 때문.

  • order by : 특정 열의 값에 따라 정렬하는 데 사용.

sql select 쿼리문 실행 순서

  • 순서상 from > where > select 순으로 SQL 쿼리문이 실행된다.
  • rownum의 경우 기본적으로 1부터 시작하기 때문에, 해당 조건 중 rownum > 10를 만족하지 못한다.
    -> 해당 조건을 만족하는 데이터들이 없으므로, SQL 쿼리문 실행 결과가 하나도 나오지 않는 것.

부트스트랩 활용하기.

                        <div class="">
	                        <nav aria-label="Page navigation example">
								<ul class="pagination justify-content-center">
									<c:if test="${pageMaker.prev}">
										<li class="page-item"><a class="page-link" href="${pageContext.request.contextPath}/board/list2${pageMaker.makeQuery(pageMaker.startPage-1)}">Previous</a></li>
									</c:if>
									<c:forEach var="idx" begin="${pageMaker.startPage}" end="${pageMaker.endPage}">										
										<c:choose>
											<c:when test="${pageMaker.criteria.pageNum == idx}">
												<li class="page-item active"><a class="page-link" href="${pageContext.request.contextPath}/board/list2${pageMaker.makeQuery(idx)}">${idx}</a></li>
											</c:when>
											<c:otherwise>
												<li class="page-item"><a class="page-link" href="${pageContext.request.contextPath}/board/list2${pageMaker.makeQuery(idx)}">${idx}</a></li>
											</c:otherwise>							
										</c:choose>
									</c:forEach>
									<c:if test="${pageMaker.next && pageMaker.endPage > 0}">
										<li class="page-item"><a class="page-link" href="${pageContext.request.contextPath}/board/list2${pageMaker.makeQuery(pageMaker.endPage+1)}">Next</a></li>
									</c:if>															
								</ul>
							</nav>
						</div>

부트스트랩을 이용해서 화면 꾸미기는 해당 방식처럼 사용함.

  • 이전에 만든 포맷 활용.
  • 해당 페이지만 해보기.

-> 해당 부분만 입힌 상태.

profile
두리둥둥

0개의 댓글