
๐ก ํ์ด์ง๋ค์ด์
์ ๋ง์ ์์ ์ฝํ
์ธ ๋ฅผ ํ์ํ๊ธฐ ์ฝ๋๋ก ์ฌ๋ฌ ํ๋ฉด์ ๋๋๊ณ , ๋ถํ ๋ ํ๋ฉด์ ํ์ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์์์ด๋ค.
๐ ํ์ํ ํ์ผ
XML, Service, VO, ServiceImpl, Controller, JSP, Mapper
MyBatic ๊ธฐ๋ฐ์ด๊ธฐ์ DB์์ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ ํ๋ฉด์ ํํํ๋ ๋ฐฉ์์ ์ ํํ๋ค.
๐ page์ ํ์ํ ์ปฌ๋ผ์
pageNo, pageSize, totalCount, totalPage์ด๋ค.
๋จผ์ totalCount๋ฅผ ๊ตฌํ๊ธฐ ์ํ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๋ค.
SELECT COUNT(*)
FROM sm_board
WHERE del_yn != 'Y'
๊ทธ๋ฐ ๋ค์, ๊ฒ์ํ์ ๋ฆฌ์คํธ๋ฅผ ๋ถ๋ฌ์ค๋๋ฐ
MySQL ๊ธฐ๋ฐ์ด๊ธฐ์ LIMIT์ ์ฌ์ฉํ๋ค.
offSet, pageSize๋ฅผ ๋ฃ์ด ํด๋น ํ์ด์ง์ ๋ฆฌ์คํธ๋ง ํธ์ถ๋๊ฒ๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๋ค.
๐ก ์ด๋, MySQL์์ LIMIT n, m ์ ์ฌ์ฉํด์, n๋ฒ์งธ ๋ฐ์ดํฐ๋ถํฐ m๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐํ์ํค๋ ํจ์๋ฅผ ์ฌ์ฉํ๋ค.
SELECT *
FROM sm_board
WHERE del_yn != 'Y'
ORDER BY created_at desc
LIMIT #{offSet}, #{pageSize};
ํ์ด์ง๋ค์ด์ ์ ์ํ ์ฟผ๋ฆฌ ์์ฑ์ ์๋ฃ!
๊ทธ๋ค์ pageVO๋ฅผ ์์ฑํ๋ค.
๊ธฐ์กด์ ์๋ BoardVO ์ extends๋ฅผ ํ์ฌ ์์ฐ์ค๋ ํธ์ถ๋๊ฒ๋ ํ๋ค.
<public class SmBoardVO extends SmPageVO
page.VO
private int pageNo = 1;
private int pageSize = 10;
private int totalCount;
public int getOffset() {
if (pageNo < 1) pageNo = 1;
return (pageNo - 1) * pageSize;
}
public int getPageNo() {
return pageNo;
}
public void setPageNo(int pageNo) {
this.pageNo = pageNo;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
//์ ์ฒด ํ์ด์ง ์, ์ด ๊ธ ๊ฐ์ ๋๋๊ธฐ 10 (๋ฐ์ ๋ฒํธ)
public int getTotalPage() {
return (int) Math.ceil((double) totalCount / pageSize);
}
public int getTotalCount() { return totalCount; }
public void setTotalCount(int totalCount) { this.totalCount = totalCount; }
ํ์ด์ง๋ ๊ธฐ๋ณธ๊ฐ 1, ์ฌ์ด์ฆ๋ 10์ผ๋ก ์ง์ ํ๋ค.
MySQL์ LIMIT์ ์ฌ์ฉํ์๋
| ํ์ด์ง | offset |
|---|---|
| 1ํ์ด์ง | 0 |
| 2ํ์ด์ง | 10 |
| 9ํ์ด์ง | 80 |
์ด๋ผ์ ๐ +1 ์๋ ๊ณ์ฐ์ ์จ์ผ ํ๋ค.
boardController.java
@RequestMapping(value = "/list", method = RequestMethod.GET)
public String boardPage(SmBoardVO vo, ModelMap model) throws Exception {
//์ด ๊ธ ๊ฐ์
int totalCount = smBoardService.selectBoardListCnt(vo);
vo.setTotalCount(totalCount); //์ธํ
ํด์ฃผ๊ธฐ
List<SmBoardVO> boardList = smBoardService.selectBoardList(vo);
model.addAttribute("num", totalCount);
model.addAttribute("boardList", boardList);
model.addAttribute("page",vo);
return "smSolution/adm/board/board_list";
}
์ปจํธ๋กค๋ฌ๋ ์ด ๊ธ ๊ฐ์๋ฅผ DB์์ ๋ถ๋ฌ์ ์ธํ
ํด์ค๋ค.
pageNo, pageSize๋ ๊ธฐ๋ณธ๊ฐ์ผ๋ก 1, 10 ์ด ์ธํ
๋๋ค.
pagination.jsp
<c:set var="pageNo" value="${page.pageNo}" />
<c:set var="pageSize" value="${page.pageSize}" />
<c:set var="totalPage"
value="${page.totalPage}" />
<div class="pagination">
<!-- ์ด์ -->
<c:if test="${pageNo > 1}">
<a class="page-btn" href="?pageNo=${pageNo - 1}">์ด์ </a>
</c:if>
<!-- ํ์ด์ง ๋ฒํธ -->
<c:forEach var="i" begin="1" end="${totalPage}">
<c:choose>
<c:when test="${i == pageNo}">
<strong class="page-btn" >${i}</strong>
</c:when>
<c:otherwise>
<a class="page-btn" href="?pageNo=${i}">${i}</a>
</c:otherwise>
</c:choose>
</c:forEach>
<!-- ๋ค์ -->
<c:if test="${pageNo < totalPage}">
<a class="page-btn" href="?pageNo=${pageNo + 1}">๋ค์</a>
</c:if>
</div>
์ด ์ปดํฌ๋ํธ๋ ์ด๋ ๊ฒ ํธ์ถํ์ฌ ์ฌ์ฉํ๋ค.
<%@ include file="../../main/pagination.jsp" %>

๋ธ๋ผ์ฐ์
โ GET /board/list?pageNo=2
โ Controller
โ Service
โ Mapper (MyBatis)
โ MySQL
โ ๊ฒฐ๊ณผ
โ Model ์ธํ
โ JSP (board.jsp)
โ pagination.jsp include