2018.5.3
仅为个人理解 不足之处欢迎指正~
在上一篇文章SSM学习记录(三)——通过limit实现分页中
通过Limit语句调控每次查询的数据条数实现了分页
而这一方式比较的繁琐
我们可以看到为了保证结果的正确
需要写count语句来确认数量 需要写逻辑来计算页数 在前端页面(jsp)中
对于上下页、首末页的跳转也需要在EL表达式中加入计算
本节将使用PageHelper插件来实现分页功能
让分页这一操作更加轻松
第一步:在Maven中添加PageHelper
PageHelper的具体信息可以查看官方文档
本文使用的PageHelper版本较低,为4.1.2
目前官网已经发布的版本为5.1.4
若读者使用的是5.0以上版本的PageHelper 配置方式与本文有些许差别 具体请参考官方文档
pom.xml中增加以下语句:
目前使用的pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.tzy</groupId>
<artifactId>MVCDemo2</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>MVCDemo1 Maven Webapp</name>
<url>http://maven.apache.org</url>
<properties>
<spring.version>4.3.0.RELEASE</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.34</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>4.2.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>aopalliance</groupId>
<artifactId>aopalliance</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
<version>0.9.5</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
<finalName>TestMaven2</finalName>
</build>
</project>
第二步:配置PageHelper
对PageHelper的配置可以在mybatis的配置文档中进行
而由于本项目将mybatis的配置整合入了Spring的配置文件中,
所以在这里仅介绍在springConfig中的配置
在mybatis配置文档中的配置请参考官方文档
<!--配置sessionFactory-->
<bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="jdbcDataSource" />
<property name="mapperLocations">
<array>
<value>classpath:Dao/**/*.xml</value>
</array>
</property>
<property name="typeAliasesPackage" value="com.isea533.mybatis.model"/>
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageHelper">
<property name="properties">
<value>
dialect=mysql
reasonable=true
</value>
</property>
</bean>
</array>
</property>
</bean>
其中
是对Pagehelper的具体配置
value中的属性dialect代表使用的数据库类型
reasonable代表合理化参数 比如当查询的页数超过总页数时 若配置为true 则查询最后一页
PageHelper中有非常多的参数 具体使用情况还请阅读官方文档
第三步:Dao层的编写
在接口类中添加了一个方法:
以下是它的实现:
用到的Base属性为:
第四步:service层的编写
在接口类中添加一个方法:
实现非常的简单:
相比之下Limit方法的实现就要增加许多计算
第五步:controller层的编写

其中:
代表每页显示2条数据
第六步:view层的编写
PageHelper.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 PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>PageHelper</title>
</head>
<body>
<center>
<table width="200" border="1">
<tr>
<th scope="col">username</th>
<th scope="col">phone</th>
<th scope="col">email</th>
</tr>
<c:forEach begin="0" step="1" items="${userList}" var="list" varStatus="userlist">
<tr>
<td>${list.username}</td>
<td>${list.phone}</td>
<td>${list.email}</td>
</tr>
</c:forEach>
</table>
<p>一共${page.pages}页</p>
<a href="PageHelper?page=${page.firstPage}">第一页</a>
<a href="PageHelper?page=${page.nextPage}">下一页</a>
<a href="PageHelper?page=${page.prePage}">上一页</a>
<a href="PageHelper?page=${page.lastPage}">最后页</a>
</center>
</body>
</html>
测试结果:

其他代码:
其他部分代码均未作改动 如有需要前面的文章应该都有提到~
总结:
在PageHelper的自带类PageInfo中,可以看到大致的实现过程和使用到了哪些变量 方法等

有兴趣的话可以自己研究一下
使用PageHelper不仅可以减少后端的工作量
我之前放在前端使用EL表达式进行的下一页上一页之类的计算操作也可以通过自有属性
来完成 非常的方便
至于最新版本5.1.4 经过了一段时间的调试终究没有成功
应该是我这里搭配的环境出现了一些问题
所以最终还是使用了4.2.1这个版本
谢谢~