目录
一、导入pageHelper依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.2.0</version>
</dependency>
二、在配置SqlSessionFactory 中加入 PageHelper 的插件配置
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!--绑定mybatis的配置文件-->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
<!--分页插件-->
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties">
<value>
</value>
</property>
</bean>
</array>
</property>
</bean>
三、编写service层接口和实现类
service接口
//使用PageHelper分页查询
List<User> queryPHUser(int page,int size);
impl实现类
@Override
public List<User> queryPHUser(int page, int size) {
//PageHelper.startPage(当前页,每一页的数量)完成分页查询操作
PageHelper.startPage(page,size);
return userMapper.queryAllUser();
}
userMapper.queryAllUser()对应的sql还是 select * from user 不变
四、编写controller层
package ltl.controller;
import com.github.pagehelper.PageInfo;
import ltl.domain.User;
import ltl.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
/**
* @author LTL
* @date 2021-06-18 18:06
*/
@Controller
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
//进入用户信息页并给参数设置默认值
@RequestMapping("/allUser")
public String allUser(@RequestParam(name = "page",defaultValue = "1") int page,
@RequestParam(name = "size",defaultValue = "3") int size,
Model model){
List<User> userList = userService.queryPHUser(page, size);
//PageHelper库中PageInfo类封装了要查询的list,它包含了分页信息的详细信息(当前页,每页的数量,结果总数,当前页的数量,总页数...太多信息..)
PageInfo pageInfo = new PageInfo(userList);
model.addAttribute("pageInfo", pageInfo);
//跳转到allUser.jsp
return "allUser";
}
五、编写jsp
前端通过调用model.addAttribute(“pageInfo”, pageInfo)当中的pageInfo中的list属性循环输出数据即可
<table>
<thead>
<tr>
<th>用户编号</th>
<th>用户名称</th>
<th>用户密码</th>
<th>用户邮箱</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<c:forEach var="user" items="${pageInfo.list}">
<tr>
<td>${user.id}</td>
<td>${user.username}</td>
<td>${user.password}</td>
<td>${user.email}</td>
<td>
<a href="${pageContext.request.contextPath}/user/toUpdate?id=${user.id}">修改</a>
|
<a href="${pageContext.request.contextPath}/user/deleteUser?id=${user.id}">删除</a>
</td>
</tr>
</c:forEach>
</tbody>
</table>
六、运行结果
我们通过看PageInfo类的源码可以发现该类中包含许多属性,这就帮助我们去实现分页的一些常见操作。
PageInfo类
public static final int DEFAULT_NAVIGATE_PAGES = 8;
//当前页
private int pageNum;
//每页的数量
private int pageSize;
//当前页的数量
private int size;
//由于startRow和endRow不常用,这里说个具体的用法
//可以在页面中"显示startRow到endRow 共size条数据"
//当前页面第一个元素在数据库中的行号
private long startRow;
//当前页面最后一个元素在数据库中的行号
private long endRow;
//总页数
private int pages;
//前一页
private int prePage;
//下一页
private int nextPage;
//是否为第一页
private boolean isFirstPage = false;
//是否为最后一页
private boolean isLastPage = false;
//是否有前一页
private boolean hasPreviousPage = false;
//是否有下一页
private boolean hasNextPage = false;
//导航页码数
private int navigatePages;
//所有导航页号
private int[] navigatepageNums;
//导航条上的第一页
private int navigateFirstPage;
//导航条上的最后一页
private int navigateLastPage;
他的父类PageSerializable所含属性
//总记录数
protected long total;
//结果集
protected List<T> list;
七、在页面添加首页、尾页、上一页、下一页、数据总数等操作
<table>
<thead>
<tr>
<th>用户编号</th>
<th>用户名称</th>
<th>用户密码</th>
<th>用户邮箱</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<c:forEach var="user" items="${pageInfo.list}">
<tr>
<td>${user.id}</td>
<td>${user.username}</td>
<td>${user.password}</td>
<td>${user.email}</td>
<td>
<a href="${pageContext.request.contextPath}/user/toUpdate?id=${user.id}">修改</a>
|
<a href="${pageContext.request.contextPath}/user/deleteUser?id=${user.id}">删除</a>
</td>
</tr>
</c:forEach>
</tbody>
</table>
共有${pageInfo.pages}页,共有${pageInfo.total}条数据
<a href="${pageContext.request.contextPath}/user/allUser?page=1&size=${pageInfo.pageSize}">首页</a>
<a href="${pageContext.request.contextPath}/user/allUser?page=${pageInfo.pageNum-1}&size=${pageInfo.pageSize}">上一页</a>
<c:forEach begin="1" end="${pageInfo.pages}" var="ThePageNumber">
<a href="${pageContext.request.contextPath}/user/allUser?page=${ThePageNumber}&size=${pageInfo.pageSize}">${ThePageNumber}</a>
</c:forEach>
<a href="${pageContext.request.contextPath}/user/allUser?page=${pageInfo.pageNum+1}&size=${pageInfo.pageSize}">下一页</a>
<a href="${pageContext.request.contextPath}/user/allUser?page=${pageInfo.pages}&size=${pageInfo.pageSize}">尾页</a>