필요한 변수들을 초기화한다.
int static pageSIZE=4; //한 페이지에 레코드를 몇 개씩 보여줄지
int static totalRecord=0; //총 레코드 수
int static totalPage=1; //총 페이지 수
URL 뒤에 붙는 parameter(페이지 번호)를 매개변수로 전달받기 위해 @RequestParam을 사용
@RequestParam(value="pageNUM",defaultValue="1") int pageNUM
pageNUM으로 전달되는 값이 없을 시 디폴트로 1을 설정한다.
<select id="total" resultType="java.lang.Integer">
select count(*) from goods
</select>
public static int getTotal() {
int cnt=0;
SqlSession session=sqlSessionFactory.openSession();
cnt=session.selectOne("goods.total");
session.close();
return cnt;
}
totalRecord=dao.getTotalRecord();
totalPage=(int)Math.ceil((double)totalRecord/pageSIZE);
Math.ceil은 올림해주는 함수.
totalRecord/pageSIZE 가 나누어 떨어질 경우 그대로 쓰면 되고 나머지가 있을 경우 올림하면 됨. (예: 4.2→5페이지 / 4→4페이지)
모델에 totalPage를 실어 view로 전달해준다.
model.addAttribute("totalPage", totalPage);
<c:forEach var="i" begin="1" end="${totalPage }">
<a href="listGoods?pageNUM=${i }">${i }</a>
</c:forEach>
int start=(pageNUM-1)*pageSIZE+1;
int end=pageNUM*pageSIZE;
if (end>totalRecord) {
end=totalRecord;
}
map.put("start", start);
map.put("end", end);
<select id="findAll" resultType="goodsVO" parameterType="java.util.HashMap">
select no,name,price,qty,fname from
(select rownum n, a.* from
(select * from goods) a)
where n between #{start} and #{end}
</select>
(한 페이지에 페이지 번호 몇개씩 보일지)
//변수 선언, 초기화
private static int pageGroup=5;
//한 화면에 보여줄 페이지 번호 수 (1 2 3 4 5 ▶ / ◀ 6 7 8 9 10 ▶ / ◀ 11 ...)
//만약 현재페이지가 1,2,3,4,5 ==> startPage=1, endPage=5
//만약 현재페이지가 6,7,8,9,10 ==> startPage=6, endPage=10
//만약 현재페이지가 11,12,13,14,15 ==> startPage=11, endPage=15
//9를 5로 나눈 몫->1 1*5+1
int startPage=((pageNUM-1)/pageGroup)*pageGroup+1;
int endPage=startPage+pageGroup-1;
if(endPage>totalPage) {
endPage=totalPage;
} //endPage가 totalPage보다 크면 안 되니까
model.addAttribute("startPage", startPage);
model.addAttribute("endPage", endPage);
<c:if test="${startPage>1}">
<a href="listBoard?pageNUM=${startPage-1 }">◀</a>
</c:if>
<c:forEach var="i" begin="${startPage }" end="${endPage }">
<a href="listBoard?pageNUM=${i }">${i }</a>
</c:forEach>
<c:if test="${endPage<totalPage}">
<a href="listBoard?pageNUM=${endPage+1 }">▶</a>
</c:if>
package com.example.demo.controller;
import java.util.HashMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import com.example.demo.dao.BoardDAO;
import com.example.demo.vo.BoardVO;
@Controller
public class BoardController {
private static int pageSIZE=3; //한 화면에 보여줄 레코드의 수
private static int totalRecord=0; //전체 레코드(게시글)의 수
private static int totalPage=0; //전체 페이지 수
private static int pageGroup=5; //한 화면에 보여줄 페이지 번호 수 (1 2 3 4 5 ▶ / ◀ 6 7 8 9 10 ▶ / ◀ 11 ...)
@Autowired
private BoardDAO dao;
public void setDao(BoardDAO dao) {
this.dao = dao;
}
@RequestMapping("/listBoard")
public void list(Model model,
@RequestParam(value="pageNUM", defaultValue="1") int pageNUM) {
totalRecord=dao.getTotalRecord();
totalPage=(int) Math.ceil((double)totalRecord/pageSIZE);
int start=(pageNUM-1)*pageSIZE+1;
int end=start+pageSIZE-1;
HashMap<String, Object> map=new HashMap<>();
map.put("start", start);
map.put("end", end);
System.out.println("pageNUM:"+pageNUM);
System.out.println("start:"+start);
System.out.println("end:"+end);
model.addAttribute("list",dao.findAll(map));
model.addAttribute("totalPage", totalPage);
//만약 현재페이지가 1,2,3,4,5 ==> startPage=1, endPage=5
//만약 현재페이지가 6,7,8,9,10 ==> startPage=6, endPage=10
//만약 현재페이지가 11,12,13,14,15 ==> startPage=11, endPage=15
//9를 5로 나눈 몫->1 1*5+1
int startPage=((pageNUM-1)/pageGroup)*pageGroup+1;
int endPage=startPage+pageGroup-1;
if(endPage>totalPage) {
endPage=totalPage;
}
System.out.println("startPage:"+startPage);
System.out.println("endPage:"+endPage);
model.addAttribute("startPage", startPage);
model.addAttribute("endPage", endPage);
}
@GetMapping("/detailBoard")
public void detail(Model model, int no) {
model.addAttribute("b", dao.findByNo(no));
}
}