PageHelper的使用

随声附和 提交于 2020-03-01 10:35:51


1、导入pom

			<!-- MyBatis分页插件 -->
			<dependency>
				<groupId>com.github.pagehelper</groupId>
				<artifactId>pagehelper</artifactId>
				<version>4.0.0</version>
			</dependency>

2、配置spring-mybaits文件

配置在sqlSessionFactory中

		<!-- 配置插件 -->
		<property name="plugins">
			<array>
				<!-- PageHelper插件全类名 -->
				<bean class="com.github.pagehelper.PageHelper">
					<!-- 配置插件属性 -->
					<property name="properties">
						<props>
							<!-- 配置数据库方言,这里用的是mysql数据库 -->
							<!-- MySQL分页:LIMIT -->
							<!-- Oracle分页:TopN分析 -->
							<prop key="dialect">mysql</prop>

							<!-- 配置自动修正页码,页数不能小于1,不能大于总页数 -->
							<!-- pageNo的有效范围:1~总页数 -->
							<prop key="reasonable">true</prop>
						</props>
					</property>
				</bean>
			</array>
		</property>

3、后台分页

查询所有,查询关键字,可以共用

	// 查询用户,分页
	@RequestMapping("/admin/query/for/search")
	public String queryForSearch(
			//如果页面没有提供参数,可以使用defaultValue设置默认值
			@RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,
			@RequestParam(value = "pageSize", defaultValue = "5") Integer pageSize,
			@RequestParam(value = "keyword", defaultValue = "") String keyword,
			Model model) {
		// 1.调用PageHelper的工具方法,开启分页功能
		PageHelper .startPage(pageNum,pageSize);
		
		// 2.执行分页查询,根据条件查询,如果keyword为空,就查所有
		List<Admin> list = adminMapper.selectAdminListByKeyword(keyword);
		
		// 3.将list封装到PageInfo对象中
		PageInfo<Admin> pi=new PageInfo<>(list);
		
		// 4、最后存入model中
		model.addAttribute("pageInfo",pi);

		return "admin-page";
	}

4、使用jQuery的前端分页插件:Pagination

  这里的jsp页面使用jQuery的分页插件:Pagination,需要用得到jquery.pagination.js文件和pagination.css文件,这里提供下载地址
下载地址:资源链接
提取码:y7my
下载后的css文件放入css文件夹即可,js文件放入jquery文件夹即可,然后在jsp页面中导入css和jquery

4.1 导入需要的js和css

//导入pagination.css
<link rel="stylesheet" href="css/pagination.css" />
//导入jquery.pagination.js
<script type="text/javascript" src="jquery/jquery.pagination.js"></script>

4.2 script方法

<script type="text/javascript">
	$(function() {
		//回调函数的作用是显示对应分页的列表项内容
		//回调函数在用户每次点击分页链接的时候执行
		//参数page_index{int整型}表示当前的索引页
		var initPagination = function() {
			// 总记录数
			var totalRecord = ${requestScope['PAGE-INFO'].total}
			// 显示分页导航条
			$("#Pagination").pagination(totalRecord, {
				num_edge_entries : 3, //边缘页数,就是两边显示的页数数量
				num_display_entries : 5, //主体页数,就是中间显示的页数
				callback : pageselectCallback,	//回调函数
				items_per_page : ${requestScope['PAGE-INFO'].pageSize},	//每页显示几条数据
				current_page : ${requestScope['PAGE-INFO'].pageNum-1},	//当前页页码
				prev_text : "上一页" ,
				next_text : "下一页" 
			});
		}();

		//每次点击上一页下一页或者具体的页码,执行这个函数跳转页面
		function pageselectCallback(pageIndex, jq) {
			
			//pageIndex从0开始,pageNum从1开始
			var pageNum=pageIndex+1;
			
			
			//跳转页面
			window.location.href="admin/query/for/search.html?pageNum=" + pageNum;
			
			return false;
		}
	});
</script>

分页的显示,加入以下div

<div id="Pagination" class="pagination"></div>

4.3 JSP页面所有代码

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html lang="UTF-8">
<%@ include file="/WEB-INF/include-head.jsp"%>
<link rel="stylesheet" href="css/pagination.css" />
<script type="text/javascript" src="script/jquery.pagination.js"></script>
<script type="text/javascript">
	$(function() {
		//回调函数的作用是显示对应分页的列表项内容
		//回调函数在用户每次点击分页链接的时候执行
		//参数page_index{int整型}表示当前的索引页
		var initPagination = function() {
			// 总记录数
			var totalRecord = ${requestScope.pageInfo.total}
			// 显示分页导航条
			$("#Pagination").pagination(totalRecord, {
				num_edge_entries : 3, //边缘页数,就是两边显示的页数数量
				num_display_entries : 5, //主体页数,就是中间显示的页数
				callback : pageselectCallback,	//回调函数
				items_per_page : ${requestScope.pageInfo.pageSize},	//每页显示几条数据
				current_page : ${requestScope.pageInfo.pageNum-1},	//当前页页码
				prev_text : "上一页" ,
				next_text : "下一页" 
			});
		}();

		//每次点击上一页下一页或者具体的页码,执行这个函数跳转页面
		function pageselectCallback(pageIndex, jq) {
			
			//pageIndex从0开始,pageNum从1开始
			var pageNum=pageIndex+1;
			
			//跳转页面
			window.location.href="admin/query/for/search.html?pageNum=" + pageNum+"&keyword=${param.keyword}";
			
			return false;
		}
	});
</script>
<body>

	<%@ include file="/WEB-INF/include-nav.jsp"%>
	<div class="container-fluid">
		<div class="row">
			<%@ include file="/WEB-INF/include-sidebar.jsp"%>
			<div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
				<div class="panel panel-default">
					<div class="panel-heading">
						<h3 class="panel-title">
							<i class="glyphicon glyphicon-th"></i> 数据列表
						</h3>
					</div>
					<div class="panel-body">
						<form action="admin/query/for/search.html" method="post" class="form-inline" role="form" style="float: left;">
							<div class="form-group has-feedback">
								<div class="input-group">
									<div class="input-group-addon">查询条件</div>
									<input class="form-control has-success" type="text" name="keyword"
										placeholder="请输入查询条件">
								</div>
							</div>
							<button type="submit" class="btn btn-warning">
								<i class="glyphicon glyphicon-search"></i> 查询
							</button>
						</form>
						<button type="button" class="btn btn-danger"
							style="float: right; margin-left: 10px;">
							<i class=" glyphicon glyphicon-remove"></i> 删除
						</button>
						<button type="button" class="btn btn-primary"
							style="float: right;" onclick="window.location.href='add.html'">
							<i class="glyphicon glyphicon-plus"></i> 新增
						</button>
						<br>
						<hr style="clear: both;">
						<div class="table-responsive">
							<table class="table  table-bordered">
								<thead>
									<tr>
										<th width="30">#</th>
										<th width="30"><input type="checkbox"></th>
										<th>账号</th>
										<th>名称</th>
										<th>邮箱地址</th>
										<th width="100">操作</th>
									</tr>
								</thead>
								<tbody>

									<c:if test="${empty requestScope.info.list }">
										<tr>
											<td style="text-align: center;" colspan="6">抱歉!没有符合您要求的查询结果</td>
										</tr>
									</c:if>
									<c:if test="${!empty requestScope.pageInfo.list }">
										<c:forEach items="${requestScope.pageInfo.list }"
											var="admin" varStatus="myStatus">
											<tr>
												<td>${myStatus.count }</td>
												<td><input type="checkbox"></td>
												<td>${admin.loginAcct }</td>
												<td>${admin.userName }</td>
												<td>${admin.email }</td>
												<td>
													<button type="button" class="btn btn-success btn-xs">
														<i class=" glyphicon glyphicon-check"></i>
													</button>
													<button type="button" class="btn btn-primary btn-xs">
														<i class=" glyphicon glyphicon-pencil"></i>
													</button>
													<button type="button" class="btn btn-danger btn-xs">
														<i class=" glyphicon glyphicon-remove"></i>
													</button>
												</td>
											</tr>
										</c:forEach>
									</c:if>
								</tbody>
								<tfoot>
									<tr>
										<td colspan="6" align="center">
											<div id="Pagination" class="pagination"></div>
										</td>
									</tr>

								</tfoot>
							</table>
						</div>
					</div>
				</div>
			</div>
		</div>
	</div>
</body>
</html>

引用了boostrap的一些样式就是以下显示,不要样式也可以,以上代码查询功能也完成了
在这里插入图片描述

5、简单的前端分页显示,不需要框架

    <div>
	    <c:if test="${pageInfo.hasPreviousPage}">
	        <a href="home?pageNum=1">首页</a>
	        <a href="home?pageNum=${pageInfo.pageNum-1}">上一页</a>
	    </c:if>
	    <c:if test="${pageInfo.hasNextPage}">
	        <a href="home?pageNum=${pageInfo.pageNum+1}">下一页</a>
	        <a href="home?pageNum=${pageInfo.pages}">末页</a>
	    </c:if>
	    <span>第${pageInfo.pageNum}/共${pageInfo.pages}</span>
	</div>
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!