@Controller
public class MemberControllerImpl implements MemberController {
@Override
@RequestMapping(value = "membersMG.do", method= {RequestMethod.POST, RequestMethod.GET})
public ModelAndView memberList(HttpServletRequest request, HttpServletResponse response, ModelAndView mv,
RedirectAttributes redirect)throws Exception {
String pageNoVal = request.getParameter("pageNo");
int pageNo = 1;
if(pageNoVal != null) {
pageNo = Integer.parseInt(pageNoVal);
}
MemberListDTO memberListDTO = memberService.membersPage(pageNo);
mv.addObject("memberListDTO", memberListDTO);
}
}
@Service("adMemberService")
public class MemberServiceImpl implements MemberService {
한페이지 게시글 출력 개수
private int size = 20;
게시글 총 개수 조회
@Override
public int membersCount() {
return memberDAO.memberCount();
}
페이징 및 게시글 조회
@Override
public MemberListDTO membersPage(int pageNo) {
int total = memberDAO.memberCount();
List<MemberDTO> content = memberDAO.membersPage((pageNo-1)*size, size);
return new MemberListDTO(total, pageNo, size, content);
}
}
@Repository("adMemberDAO")
public class MemberDAOImpl implements MemberDAO {
게시글 총 개수 조회
public int memberCount() {
int count = sqlSession.selectOne("adMember.membersCount");
return count;
}
게시글 페이징처리 및 조회
public List<MemberDTO> membersPage(int startRow, int size){
Map<String, Integer> map = new HashMap<String, Integer>();
int start = startRow + 1;
int end = startRow+size;
map.put("start", start);
map.put("end", end);
List<MemberDTO> memberPage = sqlSession.selectList("adMember.membersPage", map);
return memberPage;
}
}
게시글 총 개수 조회 쿼리문
<select id="membersCount" resultType="int">
SELECT COUNT(*) FROM members
</select>
페이징 처리 및 개수 조회
<select id="membersPage" parameterType="hashMap" resultType="MemberDTO">
select * from (
select ROWNUM num, A.* from (
SELECT * FROM members WHERE MEMBER_ISSHOW='y' and members_kind='일반'
ORDER BY members_no DESC
)A
)
where num between #{start} and #{end}
</select>
public class PagingDTO {
private int total; //전체 게시물 수
private int currentPage; //현재 페이지
private List<BoardDTO> content; //특정 범위 게시물 조회 결과
private int totalPages; //전체 페이지 수
private int startPage; //시작페이지
private int endPage; //끝페이지
public PagingDTO() {}
public PagingDTO(int total, int currentPage, int size, List<BoardDTO> content) {
this.total = total;
this.currentPage = currentPage;
this.content = content;
if(total==0) {
this.totalPages = 0;
this.startPage = 0;
this.endPage = 0;
}else {
this.totalPages = total/size;
if(total%size>0) {
totalPages++;
}
int modVal = currentPage%5;
this.startPage = currentPage/5*5+1;
if(modVal==0) {
this.startPage -=5;
}
this.endPage = startPage+4;
if(endPage>totalPages) {this.endPage = totalPages;}
}
}
public int getTotal() {
return total;
}
public boolean hasNoArticles() {
return total == 0;
}
public boolean hasArticles() {
return total>0;
}
public int getCurrentPage() {
return currentPage;
}
public List<BoardDTO> getContent() {
return content;
}
public int getTotalPages() {
return totalPages;
}
public int getStartPage() {
return startPage;
}
public int getEndPage() {
return endPage;
}
}
출력 방법 Jstl사용
<c:forEach items="${memberListDTO.content}" var="member" varStatus="status">
~~~
</c:forEach>
페이지 출력 방법
<c:if test="${memberListDTO.hasArticles()}">
<c:if test="${memberListDTO.startPage>5}">
<a href="${contextPath}/membersMG.do?pageNo=${memberListDTO.startPage-5}">PREV</a>
</c:if>
<c:forEach begin="${memberListDTO.startPage}" end="${memberListDTO.endPage}" step="1" var="pNo">
<a href="${contextPath}/membersMG.do?pageNo=${pNo}">${pNo}</a>
</c:forEach>
<c:if test="${memberListDTO.endPage<boardListDTO.totalPages}">
<a href="${contextPath}/membersMG.do?pageNo=${memberListDTO.startPage+5}">NEXT</a>
</c:if>
</c:if>