mybatis分頁外掛實現分頁
阿新 • • 發佈:2019-02-17
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> > 內容列表<!-- <input class="easyui-textbox" type="text" name="bh" id="bh">--></td>
<td>廳名:<input class="easyui-textbox" type="text" name="bjmc" id="bjmc"> <a href="#" class="easyui-linkbutton" icon="icon-search"
onclick="doSearch()">查詢</a>
</td>
<td>
<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>
程式碼寫的有點亂,我會繼續改的,原諒小白一枚!!!!,有什麼問題就問,要原始碼的,都可以。