對(duì)上篇基于SSM的圖書管理系統(tǒng)進(jìn)行分頁(yè)

一、在bean中加入分頁(yè)類BaseBean

1寓盗、currentPage表示當(dāng)前頁(yè)
2灌砖、pageSize表示一頁(yè)的數(shù)據(jù)展示數(shù)量

public class BaseBeen {
    private int currentPage =1;//當(dāng)前頁(yè)
    private int pageSize=5;//一頁(yè)的展示數(shù)量
    private int start;

    public int getCurrentPage() {
        return currentPage;
    }

    public void setCurrentPage(int currentPage) {
        this.currentPage = currentPage;
    }

    public int getPageSize() {
        return pageSize;
    }

    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }

    public int getStart() {
        return start;
    }

    public void setStart(int start) {
        this.start = start;
    }
}
二、讓圖書類BookBean繼承于BaseBean
三傀蚌、新建一個(gè)util包周崭,在里面添加分頁(yè)工具類Paging:
public class Paging {

    public static String getPage(BaseBeen baseBean, int count, String url, Map<String,String[]> map) {
        int pageSize = baseBean.getPageSize(); //獲取每頁(yè)的數(shù)量
        int pageCount = count%pageSize==0?count/pageSize:count/pageSize+1;//計(jì)算總頁(yè)數(shù)

        if(pageCount==0){ //如果總頁(yè)數(shù)是0,就沒(méi)有分頁(yè)
            return "";
        }
        //獲取當(dāng)前頁(yè)碼
        int currentPage = baseBean.getCurrentPage();
        //如果當(dāng)前頁(yè)大于總頁(yè)數(shù), 將當(dāng)前頁(yè)設(shè)置為最后一頁(yè)
        if(currentPage>pageCount){
            currentPage=pageCount;
        }
        //如果當(dāng)前頁(yè)小于等于0,將當(dāng)前頁(yè)設(shè)置為1
        if(currentPage<=0){
            currentPage=1;
        }
        //計(jì)算分頁(yè)的起始位置
        int start = (currentPage-1)*pageSize; // 計(jì)算開(kāi)始位置
        //將計(jì)算好的起始位置存到 Javabean,便于之后查詢數(shù)據(jù)
        baseBean.setStart(start);

        //用戶如果帶有參數(shù), name我們拼接的url上頁(yè)也應(yīng)該帶著參數(shù), 這樣點(diǎn)擊的時(shí)候, 請(qǐng)求后臺(tái)時(shí),才能把參數(shù)帶過(guò)去, 獲取的結(jié)果,也是條件篩選的結(jié)果
        StringBuilder sb = new StringBuilder(url);
        sb.append("?"); //將原來(lái)的url和?拼接到一起, 形成一個(gè)頭
        //遍歷request中的參數(shù), 將key和value拼接成請(qǐng)求  key=value&
        for (Map.Entry<String, String[]> entry : map.entrySet()) {
            String key = entry.getKey();
            //因?yàn)橄旅嬉呀?jīng)拼接了當(dāng)前頁(yè)面,那么,currentPage就不需要在這里拼接了
            if(!"currentPage".equals(key)){
                String[] values = entry.getValue();
                //請(qǐng)求時(shí),可能有一個(gè)參數(shù)名對(duì)應(yīng)多個(gè)值的情況
                for (String value : values) {
                    sb.append(key.concat("=").concat(value).concat("&"));
                }
            }
        }
        url = sb.toString(); //將拼接好的StringBuilder轉(zhuǎn)成字符串,已備使用

        //拼接按鈕
        sb = new StringBuilder();

        //如果當(dāng)前頁(yè)是第一頁(yè), 首頁(yè)和上一頁(yè)都不能點(diǎn)擊
        if(currentPage==1){
            sb.append("<button><a >首頁(yè)</a></button>");
            sb.append("<button><a >上一頁(yè)</a></button>");
        }else{
            sb.append("<button><a href='"+url+"currentPage=1'>首頁(yè)</a></button>");
            sb.append("<button><a href='"+url+"currentPage="+(currentPage-1)+"'>上一頁(yè)</a></button>");
        }
        //遍歷拼接頁(yè)碼
        if(pageCount<=7){
            for (int i = 1; i <= pageCount; i++) {
                if(i==currentPage){
                    sb.append("<button><a >"+i+"</a></button>");
                }else{
                    sb.append("<button><a href='"+url+"currentPage="+i+"'>"+i+"</a></button>");
                }
            }
        }else{
            //在多頁(yè)面情況下會(huì)有省略好,我們使用保持按鈕的總數(shù)是9個(gè), 當(dāng)前頁(yè)的前后兩個(gè)顯示顯示出來(lái),當(dāng)前頁(yè)的前后第三個(gè)用省略號(hào)代替
            //但是,但用戶點(diǎn)擊到第一頁(yè)時(shí), 后面之后兩個(gè)按鈕和一個(gè)省略號(hào),總數(shù)不足9個(gè), 當(dāng)前頁(yè)前面不夠了, 之后再后面多顯示幾個(gè)按鈕
            int n = 2;
            if(currentPage==1||currentPage==pageCount){
                n = 5;
            }else if(currentPage==2||currentPage==pageCount-1){
                n = 4;
            }else if(currentPage==3||currentPage==pageCount-2){
                n = 3;
            }
            for (int i = 1; i <= pageCount; i++) {
                if(i==currentPage){
                    sb.append("<button><a >"+i+"</a></button>");
                }else if(i>=currentPage-n&&i<=currentPage+n){
                    sb.append("<button><a href='"+url+"currentPage="+i+"'>"+i+"</a></button>");
                }else if(i==currentPage-(n+1)||i==currentPage+(n+1)){
                    sb.append("<button><a >...</a></button>");
                }
            }
        }

        //如果當(dāng)前頁(yè)時(shí)最后一頁(yè),那么下一頁(yè)和尾頁(yè)都不能點(diǎn)擊
        if(currentPage==pageCount){
            sb.append("<button><a >下一頁(yè)</a></button>");
            sb.append("<button><a >尾頁(yè)</a></button>");
        }else{
            sb.append("<button><a href='"+url+"currentPage="+(currentPage+1)+"'>下一頁(yè)</a></button>");
            sb.append("<button><a href='"+url+"currentPage="+pageCount+"'>尾頁(yè)</a></button>");
        }

        //拼接跳轉(zhuǎn)頁(yè)面按鈕和js代碼
        sb.append("<input id='pageNum' type='number'/><button onclick='toPage()'>跳轉(zhuǎn)</button>");
        sb.append("<script>function toPage(){" +
                "location.href='"+url+"currentPage='+document.getElementById('pageNum').value"+
                "}</script>");
        sb.append("<span>共 "+pageCount+" 頁(yè)</span>");
        return sb.toString();
    }
}
四、在BookMapper.xml添加SQL語(yǔ)句喳张,獲取所有圖書數(shù)量以及分頁(yè)查詢圖書
<!--查詢?nèi)繄D書(進(jìn)行展示),以及分頁(yè)展示-->
    <select id="getAllBooks" resultType="com.qianfeng.bean.BookBean">
        select * from springmvcbook limit #{start},#{pageSize}
    </select>
<!--獲取圖書數(shù)量,便于分頁(yè)-->
    <select id="getBookCount" resultType="int">
        select count (1) from springmvcbook
    </select>
五续镇、dao接口編寫
/*查詢?nèi)繄D書(進(jìn)行展示),以及分頁(yè)展示*/
    List<BookBean> getAllBooks(BookBean bookBean);

/*獲取圖書數(shù)量,用于分頁(yè)*/
    int getBookCount();
六销部、service層編寫
public List<BookBean> getAllBooks(BookBean bookBean){
        return bookDao.getAllBooks(bookBean);
    }

public int getBookCount(){
        return bookDao.getBookCount();
    }
七摸航、在controller里的查詢所有圖書展示的方法代碼里加入分頁(yè)代碼

1、想要點(diǎn)擊下一頁(yè)時(shí)數(shù)據(jù)變化舅桩,一定要將注意執(zhí)行順序酱虎,即分頁(yè)的這幾行代碼要放在展示代碼之上。原因是如果順序不對(duì)就會(huì)在執(zhí)行分頁(yè)之前就執(zhí)行了查詢語(yǔ)句擂涛,start不變读串,查的一直是limit(0,5)
2、向bookService.getAllBook(bookBean)中放bookBean,是為了 獲取start恢暖,pageSize排监,currentPage分頁(yè),因?yàn)閎ookBean繼承于BaseBeen

/*
    * 查詢所有圖書展示
    * */
    @RequestMapping("/book")
    public String getAllBooks(HttpSession session, HttpServletRequest request,BookBean bookBean){

        /*
         * 想要點(diǎn)擊下一頁(yè)時(shí)數(shù)據(jù)變化杰捂,一定要將注意執(zhí)行順序舆床,
         * 即分頁(yè)的這幾行代碼要放在展示代碼之上。原因是如果順序不對(duì)就會(huì)在執(zhí)行分頁(yè)之前就
         * 執(zhí)行了查詢語(yǔ)句嫁佳,start不變挨队,查的一直是limit(0,5)
         * */
        int count = bookService.getBookCount();
        String paging = Paging.getPage(bookBean,count,"/book",request.getParameterMap());
        session.setAttribute("paging",paging);

        /*
         * 向bookService.getAllBook(bookBean)中放bookBean,是為了
         * 獲取start蒿往,pageSize盛垦,currentPage分頁(yè),因?yàn)閎ookBean
         * 繼承于BaseBeen
         * */
        List<BookBean> list =  bookService.getAllBooks(bookBean);
        session.setAttribute("list",list);
        return "book.jsp";
    }
八瓤漏、將分頁(yè)按鈕放在頁(yè)面展示
<div id="paging">${paging}</div>

效果圖如下:


書架.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
禁止轉(zhuǎn)載腾夯,如需轉(zhuǎn)載請(qǐng)通過(guò)簡(jiǎn)信或評(píng)論聯(lián)系作者。
  • 序言:七十年代末赌蔑,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子竟秫,更是在濱河造成了極大的恐慌娃惯,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肥败,死亡現(xiàn)場(chǎng)離奇詭異趾浅,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)馒稍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門皿哨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人纽谒,你說(shuō)我怎么就攤上這事证膨。” “怎么了鼓黔?”我有些...
    開(kāi)封第一講書人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵央勒,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我澳化,道長(zhǎng)崔步,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任缎谷,我火速辦了婚禮井濒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己瑞你,他們只是感情好酪惭,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著捏悬,像睡著了一般撞蚕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上过牙,一...
    開(kāi)封第一講書人閱讀 49,749評(píng)論 1 289
  • 那天甥厦,我揣著相機(jī)與錄音,去河邊找鬼寇钉。 笑死刀疙,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的扫倡。 我是一名探鬼主播谦秧,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼撵溃!你這毒婦竟也來(lái)了疚鲤?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤缘挑,失蹤者是張志新(化名)和其女友劉穎集歇,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體语淘,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡诲宇,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了惶翻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片姑蓝。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖吕粗,靈堂內(nèi)的尸體忽然破棺而出纺荧,到底是詐尸還是另有隱情,我是刑警寧澤颅筋,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布虐秋,位于F島的核電站,受9級(jí)特大地震影響垃沦,放射性物質(zhì)發(fā)生泄漏客给。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一肢簿、第九天 我趴在偏房一處隱蔽的房頂上張望靶剑。 院中可真熱鬧蜻拨,春花似錦、人聲如沸桩引。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)坑匠。三九已至血崭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間厘灼,已是汗流浹背夹纫。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留设凹,地道東北人舰讹。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像闪朱,于是被迫代替她去往敵國(guó)和親月匣。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 一、數(shù)據(jù)庫(kù)概述 什么是數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)就是存儲(chǔ)數(shù)據(jù)的倉(cāng)庫(kù)称诗,其本質(zhì)是一個(gè)文件系統(tǒng)萍悴,數(shù)據(jù)按照特定的格式將數(shù)據(jù)存儲(chǔ)起來(lái),用戶...
    圣賢與無(wú)賴閱讀 3,853評(píng)論 0 4
  • 昨天不知道是不是一杯奶茶的緣故粪狼,導(dǎo)致我夜里一點(diǎn)依舊無(wú)法入睡退腥,眼皮很困任岸,但是大腦卻很精神再榄,想了一堆亂七八糟的事,想到...
    米婭Miya_35f7閱讀 280評(píng)論 0 0
  • 李丹離婚的時(shí)候疾就,最小的兒子只有三歲,從丈夫家那棟三層樓的別墅搬出來(lái)的時(shí)候艺蝴,她強(qiáng)忍住淚水猬腰,沒(méi)有回頭,她怕孩子們問(wèn)猜敢;媽...
    簡(jiǎn)語(yǔ)流年閱讀 235評(píng)論 0 1
  • 二貨媳婦正在家里的衛(wèi)生間中姑荷,公司領(lǐng)導(dǎo)的秘書打來(lái)電話盒延,二貨哥接著。 秘書:“快要您媳婦接電話鼠冕,領(lǐng)導(dǎo)找她有要緊事添寺!” ...
    老羅xt閱讀 360評(píng)論 0 3
  • 回憶起童年,只是覺(jué)得幼稚好笑懈费。 可再仔細(xì)回味计露,卻覺(jué)得其樂(lè)無(wú)窮。 其中大概是隱含著一些童年的無(wú)知憎乙,童年的趣事吧票罐! 現(xiàn)...
    賈佳穎閱讀 171評(píng)論 0 5