基於SSM框架的簡易的分頁功能
首先需要一個分頁工具類(Page),和實體類(Record),包裝類(seeRecord)。中間內容基本不需要改動,您可以根據需要改動每頁顯示的記錄條數。
Page類
package po;
import java.io.Serializable;
public class Page implements Serializable{
private static final long serialVersionUID = -3198048449643774660L; private int pageNow = 1; // 當前頁數 private int pageSize = 5; // 每頁顯示記錄的條數 private int totalCount; // 總的記錄條數 private int totalPageCount; // 總的頁數 @SuppressWarnings("unused") private int startPos; // 開始位置,從0開始 @SuppressWarnings("unused") private boolean hasFirst;// 是否有首頁 @SuppressWarnings("unused") private boolean hasPre;// 是否有前一頁 @SuppressWarnings("unused") private boolean hasNext;// 是否有下一頁 @SuppressWarnings("unused") private boolean hasLast;// 是否有最後一頁 /** * 通過建構函式 傳入 總記錄數 和 當前頁 * @param totalCount * @param pageNow */ public Page(int totalCount, int pageNow) { this.totalCount = totalCount; this.pageNow = pageNow; } /** * 取得總頁數,總頁數=總記錄數/總頁數 * @return */ 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; } /** * 取得選擇記錄的初始位置 * @return */ public int getStartPos() { return (pageNow - 1) * pageSize; } public void setStartPos(int startPos) { this.startPos = startPos; } /** * 是否是第一頁 * @return */ public boolean isHasFirst() { return (pageNow == 1) ? false : true; } public void setHasFirst(boolean hasFirst) { this.hasFirst = hasFirst; } /** * 是否有首頁 * @return */ public boolean isHasPre() { // 如果有首頁就有前一頁,因為有首頁就不是第一頁 return isHasFirst() ? true : false; } public void setHasPre(boolean hasPre) { this.hasPre = hasPre; } /** * 是否有下一頁 * @return */ public boolean isHasNext() { // 如果有尾頁就有下一頁,因為有尾頁表明不是最後一頁 return isHasLast() ? true : false; } public void setHasNext(boolean hasNext) { this.hasNext = hasNext; } /** * 是否有尾頁 * @return */ public boolean isHasLast() { // 如果不是最後一頁就有尾頁 return (pageNow == getTotalCount()) ? false : true; } public void setHasLast(boolean hasLast) { this.hasLast = hasLast; }
}
seeRecord類(包裝類)
package po;
public class SeeRecord {
/*當前登入的使用者名稱*/ private String loginName; /*分頁物件*/ private Page page; public String getLoginName() { return loginName; } public void setLoginName(String loginName) { this.loginName = loginName; } public Page getPage() { return page; } public void setPage(Page page) { this.page = page; }
}
Record類(實體類)
package po;
public class Record {
private int nub;
private String username;
private String loginName;
private String days;
private String business;
private String note;
public int getNub() { return nub; } public void setNub(int nub) { this.nub = nub; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getLoginName() { return loginName; } public void setLoginName(String loginName) { this.loginName = loginName; } public String getDays() { return days; } public void setDays(String days) { this.days = days; } public String getBusiness() { return business; } public void setBusiness(String business) { this.business = business; } public String getNote() { return note; } public void setNote(String note) { this.note = note; }
}
然後編寫Mybatis的Recordmapper.xml配置檔案,編寫sql語句
<?xml version="1.0" encoding="UTF-8" ?>
SELECT * FROM record WHERE loginName = #{loginName} limit #{page.startPos},#{page.pageSize}
<!--查詢總記錄條數-->
<select id="getCount" resultType="int" parameterType="String">
select count(*) from record where loginName = #{value}
</select>
接下來編寫Dao介面(RecordDao)
package Dao;
import org.springframework.stereotype.Repository;
import po.Record;
import po.SeeRecord;
import java.util.List;
@Repository
public interface RecordDao {
/取得操作記錄/
List queryAllRecord(SeeRecord seeRecord);
/*取得記錄條數資訊,通過當前使用者的loginName查詢*/
int getCount(String loginName);
}
介面編寫完成後需要慌裡面傳值,此時就需要編寫Controller。
先獲取到當前頁和使用者名稱,然後呼叫DAO介面查詢資料庫,獲得總記錄條數,把總記錄條數和當前頁傳入到page的構造方法中,page工具類會根據傳入的引數,算出共幾頁。然後查出當前使用者的所有操作記錄,存到recordList中並返回給頁面,頁面就可以顯示了。
package controller;
import Dao.RecordDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import po.Page;
import po.Record;
import po.SeeRecord;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
@Controller
public class RecordController {
@Autowired
private RecordDao recordDao;
/*檢視操作記錄*/
@RequestMapping("/queryAll")
public String record(String loginName , Model model, SeeRecord seeRecord, String pageNow){
String user_Name;
Page page = null;//new 物件在下面
user_Name = loginName;//獲取當前登入的使用者的loginName
int totalCount = recordDao.getCount(user_Name);//獲取當前使用者總記錄條數
if(pageNow != null && pageNow != "") {//防止出現空指標異常
int pageNow1 = Integer.parseInt(pageNow);
page = new Page(totalCount, pageNow1);//這樣寫的好處,判斷完成外面可以繼續呼叫
}
seeRecord.setLoginName(user_Name);
seeRecord.setPage(page);
List<Record> recordList = recordDao.queryAllRecord(seeRecord);//取得當前使用者的所有操作記錄
model.addAttribute("page",page);
model.addAttribute("recordList",recordList);
return "recordPage";
}
}
編寫jsp頁面接收並顯示。
由於測試需要,我加了一個跳轉頁面。向Controller中傳入了兩個值,pageNow和loginName,表示當前登入的使用者和當前的頁數。
<%@ page contentType=“text/html;charset=UTF-8” language=“java” %>
分頁功能顯示頁面:
<%@ page contentType=“text/html;charset=UTF-8” language=“java” %>
<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>
流水號 | 姓名 | 使用者名稱 | 操作日期 | 操作記錄 | 操作方式 |
${record.nub} | ${record.username} | ${record.loginName} | ${record.days} | ${record.business} | ${record.note} |
共 ${page.totalPageCount} 頁 第 ${page.pageNow} 頁 首頁 上一頁 上一頁 下一頁 下一頁 下一頁 尾頁 尾頁 |