轉自:https://blog.csdn.net/qq_34059693/article/details/78491513
首先建一個分頁的實體類:
public class Page implements Serializable{
private static final long serialVersionUID=1L;
private int pageNow=1; //當前也是
private int pageSize=8; //每頁顯示的數量
private int totalCount; //總記錄數
private int totalPageCount; //總頁數
private int startPos; //開始位置,從0開始
private boolean hasFrist; //是否有首頁
private boolean hasPre; //是否有前一頁
private boolean hasNext; //是否有後一頁
private boolean hasLast; //是否有尾頁
/**
* 通過構造函數,傳入總記錄數和當前頁
* @param pageNow
* @param totalCount
*/
public Page(int pageNow, int totalCount) {
super();
this.pageNow = pageNow;
this.totalCount = totalCount;
}
//獲取總頁數
public int getTotalPageCount() {
totalPageCount=getTotalCount()/getPageSize();
return (totalCount/pageSize==0) ? totalPageCount:totalPageCount+1;
}
public void setTotalPageCount(int totalPageCount) {
this.totalPageCount = totalPageCount;
}
public int getPageNow() {
return pageNow;
}
public void setPageNow(int pageNow) {
this.pageNow = pageNow;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getTotalCount() {
return totalCount;
}
public void setTotalCount(int totalCount) {
this.totalCount = totalCount;
}
//取得選擇記錄的初始位置
public int getStartPos() {
return (pageNow-1)*pageSize;
}
public void setStartPos(int startPos) {
this.startPos = startPos;
}
//判斷是否有第一頁
public boolean isHasFrist() {
return (pageNow==1) ? false:true;
}
public void setHasFrist(boolean hasFrist) {
this.hasFrist = hasFrist;
}
//如果有首頁就有前一頁
public boolean isHasPre() {
return isHasFrist() ? true:false;
}
public void setHasPre(boolean hasPre) {
this.hasPre = hasPre;
}
//如果有尾頁就有下一頁
public boolean isHasNext() {
return isHasNext() ? true:false;
}
public void setHasNext(boolean hasNext) {
this.hasNext = hasNext;
}
//判斷是否有尾頁
public boolean isHasLast() {
return (pageNow==getTotalCount()) ? false:true;
}
public void setHasLast(boolean hasLast) {
this.hasLast = hasLast;
}
實體類每個屬性的意思都加了註釋
再到mapper層寫分頁sql
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sdl.mapper.NewsMapper">
<select id="findNewsPage" resultType="News">
select * from news limit #{0},#{1}
</select>
<select id="findNewCont" resultType="int">
select COUNT(*) from news
</select>
</mapper>
第二條sql語句是記錄總數量
control層的代碼
private NewsService newsService;
@RequestMapping("/findNewsPage.service")
public String showNewsInfo(Model model,HttpServletRequest request){
//獲取當前頁數
String pageNow=request.getParameter("pageNow");
//獲取總頁數
int totalCount=(int)newsService.findNewCont();
Page page=null;
List<News> list=new ArrayList<News>();
if (pageNow!=null) {
page=new Page(Integer.parseInt(pageNow), totalCount);
list=this.newsService.findNewsPage(page.getStartPos(),page.getPageSize());
}else {
page=new Page(1, totalCount);
list=this.newsService.findNewsPage(page.getStartPos(),page.getPageSize());
}
model.addAttribute("list", list);
model.addAttribute("page", page);
return "news.jsp";
}
頁面的代碼
div class="pager">
<font size="2">共 ${page.totalPageCount} 頁</font> <font size="2">第
${page.pageNow} 頁</font> <a href="findNewsPage.service?pageNow=1">首頁</a>
<c:choose>
<c:when test="${page.pageNow - 1 > 0}">
<a href="findNewsPage.service?pageNow=${page.pageNow - 1}">上一頁</a>
</c:when>
<c:when test="${page.pageNow - 1 <= 0}">
<a href="findNewsPage.service?pageNow=1">上一頁</a>
</c:when>
</c:choose>
<c:choose>
<c:when test="${page.totalPageCount==0}">
<a href="findNewsPage.service?pageNow=${page.pageNow}">下一頁</a>
</c:when>
<c:when test="${page.pageNow + 1 < page.totalPageCount}">
<a href="findNewsPage.service?pageNow=${page.pageNow + 1}">下一頁</a>
</c:when>
<c:when test="${page.pageNow + 1 >= page.totalPageCount}">
<a href="findNewsPage.service?pageNow=${page.totalPageCount}">下一頁</a>
</c:when>
</c:choose>
<c:choose>
<c:when test="${page.totalPageCount==0}">
<a href="findNewsPage.service?pageNow=${page.pageNow}">尾頁</a>
</c:when>
<c:otherwise>
<a href="findNewsPage.service?pageNow=${page.totalPageCount}">尾頁</a>
</c:otherwise>
</c:choose>
</div>