회원과 게시판 — 읽기 자료
글이 100 개가 되면 화면이 망가진다. 한 페이지에 다 보여줄 수 없음.
스키마 변경 없이 SQL 만 바꿈. myboard 컬럼은 v6 그대로.
// BoardMapper.xml
<select id="selectListPaging" parameterType="map"
resultType="com.smhrd.domain.Board">
SELECT num, title, writer, content, created_at
FROM myboard
ORDER BY num DESC
LIMIT #{startRow}, #{pageSize}
</select>
<select id="count" resultType="int">
SELECT COUNT(*) FROM myboard
</select>
// com.smhrd.domain.Paging — 보조 클래스
public class Paging {
private int pageNo, pageSize, totalCount;
public Paging(int pageNo, int pageSize, int totalCount) {
this.pageNo = pageNo < 1 ? 1 : pageNo;
this.pageSize = pageSize;
this.totalCount = totalCount;
}
public int getStartRow() { return (pageNo - 1) * pageSize; }
public int getTotalPages() { return (int) Math.ceil((double) totalCount / pageSize); }
// getter
}
// BoardService
public List<Board> selectListPaging(Paging paging) {
Map<String, Integer> param = new HashMap<>();
param.put("startRow", paging.getStartRow());
param.put("pageSize", paging.getPageSize());
return mapper.selectListPaging(param);
}
<!-- list.jsp 의 페이지 번호 -->
<c:forEach begin="1" end="${paging.totalPages}" var="p">
<a href="?page=${p}">${p}</a>
</c:forEach>
LIMIT #{startRow}, #{pageSize} (MySQL)COUNT(*) 쿼리Paging 보조 클래스 — 도메인이 아님글이 100 개가 되면 화면이 망가진다. 한 페이지에 다 보여줄 수 없음.
페이징의 SQL 패턴과 화면 구현을 안다. v7.