1. 程式人生 > >基於SSM框架的簡易的分頁功能

基於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} 頁 首頁 上一頁 上一頁 下一頁 下一頁 下一頁 尾頁 尾頁