1. 程式人生 > >mybatis分頁外掛實現分頁

mybatis分頁外掛實現分頁

1.瞭解過程:在資料庫伺服器中,sql語句實現分頁便要每個查詢語句都要寫上limit(開始,結束),並且不能靈活的隨前端變化,為此使用攔截器的方法,過程:攔截器攔截請求的sql語句(根據需要攔截的ID(正則匹配),進行攔截),並對根據前端傳過來的頁數,和每頁的條數,計算出limit(開始,結束),總條數,然後,拼接到sql語句後邊。其中這個處理過程,已經封裝到了,分頁外掛中,可以不用理解,直接使用。
條件:maven下:
1.pom.xml中匯入依賴:

<dependency>
    <groupId>com.github.pagehelper</groupId
>
<artifactId>pagehelper</artifactId> <version>4.1.4</version> </dependency>

2.在mybatis-conf.xml中新增攔截器:

<plugins>
        <plugin interceptor="com.github.pagehelper.PageHelper">
            <!-- 設定資料庫型別 Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六種資料庫-->
<property name="dialect" value="mysql"/> </plugin> </plugins>

3.編寫page例項:

package com.tc.tccp.core.page;

/** 
 * @author wangpei 
 * @version 
 *建立時間:2016年10月12日 下午10:52:29 
 * 攔截器實現mybatis的攔截
 */
import java.util.List;

public class PageParameter {

    public
static final int DEFAULT_PAGE_SIZE = 10; private int pageSize;// 頁面大小 private int currentPage;// 當前頁的位置 private int prePage;// 上一頁 private int nextPage;// 下一頁 private int totalPage;// 總頁數 private int totalCount;// 總條數 /** * 當前頁的資料 */ private List<?> list; /** * 獲得分頁內容 * * @return */ public List<?> getList() { return list; } public PageParameter(int pageSize, int currentPage, int prePage, int nextPage, int totalPage, int totalCount, List<?> list) { this.pageSize = pageSize; this.currentPage = currentPage; this.prePage = prePage; this.nextPage = nextPage; this.totalPage = totalPage; this.totalCount = totalCount; this.list = list; } /** * 設定分頁內容 * * @param list */ @SuppressWarnings("unchecked") public void setList(List list) { this.list = list; } public PageParameter() { this.currentPage = 1; this.pageSize = DEFAULT_PAGE_SIZE; } /** * * @param currentPage * @param pageSize */ public PageParameter(int currentPage, int pageSize) { this.currentPage = currentPage; this.pageSize = pageSize; } 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 getPrePage() { return prePage; } public void setPrePage(int prePage) { this.prePage = prePage; } public int getNextPage() { return nextPage; } public void setNextPage(int nextPage) { this.nextPage = nextPage; } public int getTotalPage() { return totalPage; } public void setTotalPage(int totalPage) { this.totalPage = totalPage; } public int getTotalCount() { return totalCount; } public void setTotalCount(int totalCount) { this.totalCount = totalCount; } public String toString() { return "pageSize=" + pageSize + "currentPage=" + currentPage + "prePage=" + prePage + "nextPage=" + nextPage + "totalPage=" + totalPage + "totalCount=" + totalCount; } }

4.編寫操做的dao層,和dao.xml
其中,需要攔截的方法,需要以ID(正則匹配),我以.page結尾。
這裡寫圖片描述
5.controller層

    @RequestMapping("getAll")
    @ResponseBody
    public Map<String, Object> get(HttpServletRequest request,HttpServletResponse response, Integer page/* 當前頁 */, Integer rows/* 每頁顯示的數量 */) {
        // 當前頁
        int intPage = page == null ||  page <= 0 ? 1 : page;
        // 設定每頁顯示的數量
        int intPageSize = rows == null || rows <= 0 ? 10 : rows;
        PageParameter page1 = new PageParameter();
        System.out.println("當前頁="+intPage);
        System.out.println("一頁的條數="+intPageSize);
        page1.setCurrentPage(intPage);
        page1.setPageSize(intPageSize);
        PageHelper.startPage(intPage, intPageSize);
        List<Studio> d = studioService.findAllStudioByPage(page1); // 取商品列表
        PageInfo<Studio> pageInfo = new PageInfo<Studio>(d);
        Map<String, Object> reMap = new HashMap<String, Object>();
        // 取分頁資訊
        reMap.put("total", pageInfo.getTotal()); // 總條數
        reMap.put("pageSize", intPageSize); // 每頁顯示的數量
        reMap.put("pageNo", intPage); // 當前頁數
        reMap.put("rows", d); // 從資料庫中獲取的列表資訊

        return reMap;
    }

將獲取到的查新結果放入reMap,然後前端獲取到reMap的值,類似json格式的資料。

前端jsp頁面自己完成,我是用easyui做的,

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
    String path = request.getContextPath();
    //System.out.println("path===" + path);
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>LayOut</title>
 <script src="<%=request.getContextPath()%>/css/easyui/jquery.min.js" type="text/javascript"></script>
<script src="<%=request.getContextPath()%>/css/easyui/jquery.easyui.min.js" type="text/javascript"></script>
<link href="<%=request.getContextPath()%>/css/easyui/themes/default/easyui.css" rel="stylesheet"ntype="text/css" />
<link href="<%=request.getContextPath()%>/css/easyui/themes/icon.css" rel="stylesheet" type="text/css" /> 
<script type="text/javascript">
    $(function() {
    $('#dg').datagrid({
            title : '結果列表',
            pageSize : 10,//預設選擇的分頁是每頁10行資料
            pageList : [ 5, 10, 15, 20 ],//可以選擇的分頁集合
            nowrap : true,//設定為true,當資料長度超出列寬時將會自動擷取
            striped : true,//設定為true將交替顯示行背景。
            collapsible : true,//顯示可摺疊按鈕

            url : '/tccp/studio/getAll',//url呼叫Action方法
            loadMsg : '資料裝載中......',
            singleSelect : false,//為true時只能選擇單行
            fitColumns : false,
            remoteSort : false,
            onClickRow : function(rowIndex, rowData) {//單擊事件
            },
            onDblClickRow : function(rowIndex, rowData) {//雙擊事件
            },

            toolbar : [ {// 工具欄  
                text : '新增',  
                iconCls : 'icon-add', // 圖示  
                handler : function() { // 處理函式  
                    addBook();  
                }  
            }, {  
                text : '刪除',  
                iconCls : 'icon-cancel', // 圖示  
                handler : function() { // 處理函式  
                    deleteBook();  
                }  
            }, {  
                text : '編輯',  
                iconCls : 'icon-edit',// 圖示  
                handler : function() {// 處理函式  
                    editBook();  
                }  
            } ],  

            frozenColumns : [ [ {
                field : 'id',
                checkbox : true
            },  {
                field : 'studio_id',
                align : 'center',
                title : '廳號',
                width : 200
            }, {
                field : 'studio_name',
                align : 'center',
                title : '廳名',
                width : 200
            } ] ],
            columns : [ [ {
                field : 'studio_row_count',
                align : 'center',
                title : '行數',
                width : 200
            }, {
                field : 'studio_col_count',
                align : 'center',
                title : '列數',
                width : 200
            },{
                field : 'studio_introduction',
                align : 'center',
                title : '介紹',
                width : 200
            },{
                field : 'studio_flag',
                align : 'center',
                title : '是否安排座位',
                width : 220
            }] ],
            pagination : true,//分頁
            rownumbers : true
        //行數
        });
        var p = $('#dg').datagrid('getPager');  

        $(p).pagination({  
            pageSize: 10,//每頁顯示的記錄條數,預設為10   
            pageList: [5,10,15,20],//可以設定每頁記錄條數的列表   
            beforePageText: '第',//頁數文字框前顯示的漢字   
            afterPageText: '頁    共 {pages} 頁',   
            displayMsg: '當前顯示 {from} - {to} 條記錄   共 {total} 條記錄',   
        });


        //在datagrid例項化之後呼叫這個方法。
        $("#dg").datagrid({}).datagrid("page");

    });




    function showEditForm() {  

            $('#EditForm').form('submit', {
                url: "/tccp/studio/add",
                onSubmit: function () {               //表單提交前的回撥函式
                    var isValid = $(this).form('validate');//驗證表單中的一些控制元件的值是否填寫正確,比如某些文字框中的內容必須是數字
                    if (!isValid) {
                    }
                    return isValid; // 如果驗證不通過,返回false終止表單提交
                },
                success: function (data) {    //表單提交成功後的回撥函式,裡面引數data是我們呼叫/BasicClass/ModifyClassInfo方法的返回值。
                    if (data > 0) {
                        $.messager.show({
                            title: '提示訊息',
                            msg: '提交成功',
                            showType: 'show',
                            timeout: 1000,
                            style: {
                                right: '',
                                bottom: ''
                            }
                        });
                        $('#dg').datagrid('reload');    // 重新載入當前頁面資料  
                        $('#Editwin').window('close');  //關閉視窗
                    }
                    else {
                        $.messager.alert('提示資訊', '提交失敗,請聯絡管理員!', 'warning');
                }
                }
            });
    }  

    // 關閉視窗  
    function closeForm() {  
        $("#frmEdit").form('clear');  
        $('#tabEdit').dialog('close');  
    }  
    // 新增的函式  
    function addBook() {  
        // 清空原有的資料  
        $('#frmEdit').form('clear');  
        // 顯示新增對話方塊  
        showEditForm();  
    }  


</script>
</head>

<body class="easyui-layout" id="cc">

   <div id="tabEdit">  
                    <form id="frmEdit">  
                    <input type="hidden" id="id" name="book.id" />  
                    <dl>  
                        <dd>  
                            演出廳編號:  
                        </dd>  
                        <dd>  
                            <input type="text" style="width: 150px" id="isbn" name="studioId" />  
                        </dd>  
                    </dl>  
                    <dl>  
                        <dd>  
                            演出廳名稱:  
                        </dd>  
                        <dd>  
                            <input type="text" style="width: 150px" id="title" name="studioName" />  
                        </dd>  
                    </dl>  
                    <dl>  
                        <dd>  
                            演出廳行號:  
                        </dd>  
                        <dd>  
                            <input type="text" style="width: 150px" id="price" name="studioRow" />  
                        </dd>  
                    </dl>  
                    <dl>  
                        <dd>  
                            演出廳列號:  
                        </dd>  
                        <dd>  
                            <input type="text" style="width: 150px" id="pubdate" name="studioCol" />  
                        </dd>  
                    </dl>  
                    <dl>  
                        <dd>  
                            是否安排座位:  
                        </dd>  
                        <dd>  
                            <input type="text" style="width: 150px" id="pubdate" name="flag" />  
                        </dd>  
                    </dl>  
                    <dl>  
                        <dd>  
                            演出廳介紹:  
                        </dd>  
                        <dd>  
                            <textarea cols="45" rows="3" id="intro" name="studioIntroduce"></textarea>  
                        </dd>  
                    </dl>  
                    </form>  
                </div>  

<div region="north" border="true" split="true"
        style="overflow: hidden; height: 65px;">
        <form id="searchForm" name="searchForm">
            <table id="searchTable" width=100%>
                <tr>    
                    <td>當前位置:<a href="javascript:void(0)" style="color:#6E6E6E;">影廳管理</a> &gt; 內容列表<!--   <input class="easyui-textbox" type="text" name="bh"  id="bh">--></td>
                            &nbsp;&nbsp;&nbsp;      
                    <td>廳名:<input class="easyui-textbox" type="text" name="bjmc" id="bjmc">&nbsp;<a href="#" class="easyui-linkbutton" icon="icon-search"
                        onclick="doSearch()">查詢</a>
                    </td>
                    <td>
                    &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  
                      <td><a href="#" class="easyui-linkbutton" icon="icon-search"
                        onclick="doSearch()">退出</a>
                    </td>                       
                </tr>
            </table>

        </form>
    </div>
    <div region="center" border="true" split="true"
        style="overflow: hidden;">
        <table id="dg" title="My Users" class="easyui-datagrid" width="100%"
            height="99%" toolbar="#toolbar" rownumbers="true" fitColumns="true"
            singleSelect="true">

        </table>


    </div>





</body>
</html>

程式碼寫的有點亂,我會繼續改的,原諒小白一枚!!!!,有什麼問題就問,要原始碼的,都可以。