SSM實(shí)現(xiàn)簡(jiǎn)單的分頁(yè)

我理解的分頁(yè)有三種方式:
第一種:前臺(tái)選擇相對(duì)應(yīng)的操作(如首頁(yè)柱衔、下一頁(yè)等)票唆,點(diǎn)擊的同時(shí)傳遞參數(shù)到后臺(tái),后臺(tái)通過(guò)接受的參數(shù)調(diào)用相應(yīng)的方法實(shí)現(xiàn)分頁(yè)似踱。
第二種:前臺(tái)選擇相應(yīng)的操作,調(diào)用js部分編寫(xiě)的相對(duì)應(yīng)的方法稽煤,后臺(tái)只接收每一頁(yè)的起始值和結(jié)束值核芽,實(shí)現(xiàn)分頁(yè)。
第三種:假分頁(yè)酵熙,先將數(shù)據(jù)全部查詢(xún)出來(lái)轧简,通過(guò)前臺(tái)控制顯示,但是后臺(tái)不實(shí)現(xiàn)分頁(yè)(不推薦使用)匾二。我給大家分享的是第二種哮独,由于技術(shù)有限,所以寫(xiě)的可能不是很好察藐,但是功能實(shí)現(xiàn)了皮璧。
先從后臺(tái)開(kāi)始
mapper.xml

mapper namespace="com.zr.mapper.IBookMapper">
    <resultMap id="bookMap" type="book">
        <id property="id" column="book_id"/>
        <result property="name" column="book_name"/>
        <result property="author" column="book_author"/>
        <result property="price" column="book_price"/>
        <result property="cover" column="book_cover"/>
    </resultMap>

    <select id="findBooks" resultMap="bookMap">
        <![CDATA[ select a1.* from
        (select book_tab.*,rownum rn from book_tab) a1
        where rn between #{start} and #{end}
      ]]>
    </select>

    <select id="allCount" resultType="java.lang.Integer">
        select count(*) from book_tab
    </select>
</mapper>

Mapper層

public interface IBookMapper {

    /**
     * 分頁(yè)顯示數(shù)據(jù)
     * @param start
     * @param end
     * @return
     */
    public List<Book> findBooks(@Param("start") Integer start,@Param("end") Integer end);

    /**
     * 計(jì)算總記錄數(shù)
     * @return
     */
    public Integer allCount();

}

service層

public interface IBookService {
    public Map<String,Object> findBooks(Integer pageNumber, Integer pageSize);
    public int allCount();
}

service的實(shí)現(xiàn)

public Map<String,Object> findBooks(Integer pageNumber, Integer pageSize) {
        List<Book> rows = iBookMapper.findBooks(pageNumber,pageSize);//將查詢(xún)到的數(shù)據(jù)保存到list集合中
        Integer total = iBookMapper.allCount();
        Map<String,Object> map = new HashMap<String, Object>();
        map.put("rows",rows);
        map.put("total",total);
        return map;
    }

    public int allCount() {
        return iBookMapper.allCount();
    }

action層

@RequestMapping(value = "/findBooks.action")
    public @ResponseBody
    Map<String,Object> findBooks(Integer pageNumber, Integer pageSize){
        Map<String,Object> map =  iBookService.findBooks(pageNumber,pageSize);
        /*for (Object o : map.values()) {
              System.out.println("value= " + o);
            }*/
        return iBookService.findBooks(pageNumber,pageSize);
    }
    @RequestMapping(value = "/allCount.action")
    public @ResponseBody int allCount(){
        return iBookService.allCount();
    }

接下來(lái)是前臺(tái)頁(yè)面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>圖書(shū)列表</title>
    <script src="js/jquery-2.1.1.min.js"></script>
</head>
<body>
<table id="tab" border="1" cellspacing="0" cellpadding="0" width="650px" align="center">
    <thead style="background-color: cornsilk;">
    <th height="35px">編號(hào)</th>
    <th>書(shū)名</th>
    <th>作者</th>
    <th>價(jià)格</th>
    <th>封面</th>
    </thead>
    <tbody align="center">
    </tbody>
    <tfoot>
    <tr>
        <td colspan="5" align="center">
            每頁(yè)
            <select>
                <option>5</option>
                <option>10</option>
                <option>15</option>
            </select>條|
            <span id="firstPage" style="color:red;font-weight:bold" onclick="firstPage()">首頁(yè)</span>|
            <span id="prePage" style="color:red;font-weight:bold" onclick="prePage()">上一頁(yè)</span>|
            <span id="nextPage" style="color:red;font-weight:bold" onclick="nextPage()">下一頁(yè)</span>|
            <span id="lastPage" style="color:red;font-weight:bold" onclick="lastPage()">最后一頁(yè)</span>|
            <span style="color:red;font-weight:bold">當(dāng)前第<input style="width: 20px;" id="nowPage" type="text" value="1"/>頁(yè)</span>|
            共<input style="width: 20px;" id="count"/>頁(yè)|
            <span style="color:red;font-weight:bold">跳轉(zhuǎn)至第<input style="width: 20px;" id="jumpPage" type="text"
                                                                value="1"/>頁(yè)</span>
            <button onclick="jump()">確定</button>
        </td>
    </tr>
    </tfoot>

</table>
<script type="text/javascript">
    var allCount;//記錄總數(shù)
    var page;//總頁(yè)數(shù)
    var pageNumber = 1;//默認(rèn)起始記錄
    var pageSize = parseInt($("select").val());//每頁(yè)記錄數(shù)

    window.onload = function () {
        show();
        /*獲取總記錄數(shù)*/
        $.post("allCount.action", function (data) {
            allCount = data;
            pageNum();//頁(yè)面被加載默認(rèn)的頁(yè)數(shù)
        }, "json");

    }

    /**
     * 總頁(yè)數(shù)
     * */
    function pageNum() {
        if (allCount % parseInt($("select").val()) == 0) {
            page = parseInt(allCount / parseInt($("select").val()));
            $("#count").val(page);
        } else {
            page = parseInt(allCount / parseInt($("select").val())) + 1;
            $("#count").val(page);
        }
    }

    /**
     * 每頁(yè)顯示的條數(shù)
     * */
    $("select").change(function () {
        pageNum();
        pageSize = parseInt($("select").val());
        cha = pageSize - pageNumber;
        if (pageNumber != 1) {
            pageNumber = 1;
        }
        $("#nowPage").val("1");
        $("#jumpPage").val("1");
        show();
    });

    /**
     * 首頁(yè)
     * */
    function firstPage() {
        pageNumber = 1;
        pageSize = parseInt($("select").val());
        $("#jumpPage").val("1");
        if ($("#nowPage").val() == 1) {
            alert("已經(jīng)是首頁(yè)了")
        }
        $("#nowPage").val("1");
        show();
    }

    /**
     * 上一頁(yè)
     * */
    function prePage() {
        if (pageSize > parseInt($("select").val())) {
            $("#nowPage").val(pageSize / parseInt($("select").val()) - 1);
            $("#jumpPage").val(pageSize / parseInt($("select").val()) - 1);
            pageSize = pageNumber - 1;
            pageNumber = pageNumber - parseInt($("select").val());
            show();
        } else {
            alert("已經(jīng)是首頁(yè)了")
        }
    }

    /**
     * 下一頁(yè)
     * */
    function nextPage() {
        if (allCount > pageSize) {
            $("#nowPage").val(pageSize / parseInt($("select").val()) + 1);
            $("#jumpPage").val(pageSize / parseInt($("select").val()) + 1);
            pageNumber = pageNumber + parseInt($("select").val());
            pageSize = pageNumber + parseInt($("select").val()) - 1;
            show();
        } else {
            alert("已經(jīng)是最后一頁(yè)了")
        }
    }

    /**
     * 跳轉(zhuǎn)至第幾頁(yè)
     * */
    function jump() {
        var page = parseInt($("#jumpPage").val());
        if (page <= parseInt($("#count").val())) {
            pageSize = page * parseInt($("select").val());
            pageNumber = (page - 1) * parseInt($("select").val()) + 1;
            alert(pageNumber);
            $("#nowPage").val($("#jumpPage").val());
            show();
        } else {
            alert("該頁(yè)不存在")
            $("#jumpPage").val($("#nowPage").val());

        }
    }

    /**
     * 最后一頁(yè)
     * */
    function lastPage() {
        pageNumber = parseInt($("#count").val() - 1) * parseInt($("select").val()) + 1;
        pageSize = allCount;
        $("#jumpPage").val($("#count").val());
        if ($("#nowPage").val() == $("#count").val()) {
            alert("已經(jīng)是最后一頁(yè)了")
        }
        $("#nowPage").val($("#count").val());
        show();
    }

    function show() {
        $.post("findBooks.action", {pageNumber: pageNumber, pageSize: pageSize}, function (map) {
            var list = map.rows;
            var page = map.page;
            $("#tab tbody").empty();
            $.each(list, function (index, book) {
                var tr = $("<tr>");
                tr.append($("<td>" + book.id + "</td>"))
                    .append($("<td>" + book.name + "</td>"))
                    .append($("<td>" + book.price + "</td>"))
                    .append($("<td>" + book.author + "</td>"))
                    .append($("<td width='90px'><img src='images/" + book.cover + "' width=\"85px\" height=\"100px\"/></td>"))
                ;
                $("#tab tbody").append(tr);
            });

        }, "json");

    }
</script>
</body>
</html>

完整的代碼已經(jīng)上傳至github,寫(xiě)的不好,歡迎指教转培。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末恶导,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子浸须,更是在濱河造成了極大的恐慌惨寿,老刑警劉巖邦泄,帶你破解...
    沈念sama閱讀 212,383評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異裂垦,居然都是意外死亡顺囊,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)蕉拢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)特碳,“玉大人,你說(shuō)我怎么就攤上這事晕换∥缗遥” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,852評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵闸准,是天一觀的道長(zhǎng)益愈。 經(jīng)常有香客問(wèn)我,道長(zhǎng)夷家,這世上最難降的妖魔是什么蒸其? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,621評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮库快,結(jié)果婚禮上摸袁,老公的妹妹穿的比我還像新娘。我一直安慰自己义屏,他們只是感情好靠汁,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著湿蛔,像睡著了一般膀曾。 火紅的嫁衣襯著肌膚如雪县爬。 梳的紋絲不亂的頭發(fā)上阳啥,一...
    開(kāi)封第一講書(shū)人閱讀 49,929評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音财喳,去河邊找鬼察迟。 笑死,一個(gè)胖子當(dāng)著我的面吹牛耳高,可吹牛的內(nèi)容都是我干的扎瓶。 我是一名探鬼主播,決...
    沈念sama閱讀 39,076評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼泌枪,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼概荷!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起碌燕,我...
    開(kāi)封第一講書(shū)人閱讀 37,803評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤误证,失蹤者是張志新(化名)和其女友劉穎继薛,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體愈捅,經(jīng)...
    沈念sama閱讀 44,265評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡遏考,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蓝谨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片灌具。...
    茶點(diǎn)故事閱讀 38,716評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖譬巫,靈堂內(nèi)的尸體忽然破棺而出咖楣,到底是詐尸還是另有隱情,我是刑警寧澤芦昔,帶...
    沈念sama閱讀 34,395評(píng)論 4 333
  • 正文 年R本政府宣布截歉,位于F島的核電站,受9級(jí)特大地震影響烟零,放射性物質(zhì)發(fā)生泄漏瘪松。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評(píng)論 3 316
  • 文/蒙蒙 一锨阿、第九天 我趴在偏房一處隱蔽的房頂上張望宵睦。 院中可真熱鬧,春花似錦墅诡、人聲如沸壳嚎。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)烟馅。三九已至,卻和暖如春然磷,著一層夾襖步出監(jiān)牢的瞬間郑趁,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,027評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工姿搜, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留寡润,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,488評(píng)論 2 361
  • 正文 我出身青樓舅柜,卻偏偏與公主長(zhǎng)得像梭纹,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子致份,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評(píng)論 2 350

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,838評(píng)論 25 707
  • 今天变抽,是我們?cè)谕怀鞘械男值芙忝脗兡昵皥F(tuán)聚的日子,也就是提前過(guò)年。 這一約定早在前幾年就開(kāi)始了...
    肅南205尚曉軍閱讀 263評(píng)論 1 2
  • 可能心中有很多感覺(jué)無(wú)法對(duì)著身邊的朋友說(shuō)出來(lái)绍载,無(wú)法形容太伊,也真的可能因?yàn)楦蓪W(xué)生工作之后接觸的人和事情太多,覺(jué)得有...
    年少模樣閱讀 105評(píng)論 0 0
  • 我知道有時(shí)候沒(méi)答案就是已經(jīng)給出答案了逛钻,所以僚焦,兩個(gè)多月了,開(kāi)始要自己表決心曙痘,不想了芳悲,就這樣吧”呃ぃ或許名扛,將來(lái),我仍會(huì)想起...
    Snake修煉成仙閱讀 215評(píng)論 0 0
  • Siri目前支持以下幾個(gè)方面:1茧痒、語(yǔ)音和視頻通話(huà) (VoIP calling)2肮韧、發(fā)送消息 (Messaging)...
    碧海云天V閱讀 242評(píng)論 0 1