上一篇详细介绍了如何凭实力分页,但是在框架插件盛行的今天,自己敲分页的功能就太不方便了(就是懒),秉着拿来主义精神,既然已经有人帮我们封装这些分页方法了,不拿来用就说不过去了(就是懒!),下面就介绍一下常用的分页插件——PageHelper。
前置条件:耐性60%;IDEA2019;ssm框架
创建一张数据不少的表
这里我就还是用回之前学爬虫时候爬下来的一张表(几百条数据),盆友们可以自己建张表写点数据
Maven导入包
<!-- pagehelper分页插件-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.10</version>
</dependency>
配置插件
Spring配置文件(applicationContext.xml),在配置sqlsession工厂的地方加入property
<!-- SqlSessionFatory工厂-->
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageInterceptor"></bean>
</array>
</property>
</bean>
编写Dao方法
上一篇自己分页的时候我们访问数据库查了数据信息和总数据数,这次我们就只正常查询数据信息就行了
package com.ssm.dao;
import com.ssm.domain.Movie;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @author Mr.锵
* date 2020-04-22
*/
@Repository
public interface IMovieDao {
/**
* pagehelper分页查询电影信息
* @return
*/
@Select("select * from movie_resource")
List<Movie> PHfindAll();
}
编写service接口和实现方法
接口
- 注意:不能是List类型,要定义为PageInfo类型,因为等下不仅仅装list;
- 和上篇一样也是传入两个参数,不过num(起始数)换成page(页数),size还是size(每页显示条数);
- 查询方法前加上PageHelper.startPage(page,size)就会自动分页啦
package com.ssm.service;
import com.github.pagehelper.PageInfo;
import com.ssm.domain.Movie;
import org.apache.ibatis.annotations.Select;
/**
* @author Mr.锵
* date 2020-04-22
*/
public interface IMovieService {
/**
* pagehelper分页查询电影信息
* @return
*/
PageInfo<Movie> PHfindAll(Integer page,Integer size);
}
实现类
package com.ssm.service.Impl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.ssm.dao.IMovieDao;
import com.ssm.domain.Movie;
import com.ssm.service.IMovieService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @author Mr.锵
* date 2020-04-22
*/
@Service
public class IMovieServiceImpl implements IMovieService {
@Autowired
private IMovieDao movieDao;
@Override
public PageInfo<Movie> PHfindAll(Integer page, Integer size) {
PageHelper.startPage(page,size);
List<Movie> movies = movieDao.PHfindAll();
PageInfo<Movie> pageInfo = new PageInfo<> (movies);
return pageInfo;
}
编写控制器
package com.ssm.controller;
import com.github.pagehelper.PageInfo;
import com.ssm.domain.Movie;
import com.ssm.service.IMovieService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
/**
* @author Mr.锵
* date 2020-04-22
*/
@Controller
@RequestMapping("/movie")
public class MovieController {
@Autowired
private IMovieService movieService;
@RequestMapping("/PHfindAll")
public ModelAndView PHfindAll(@RequestParam(required = false,defaultValue ="1")Integer page,
@RequestParam(required = false,defaultValue ="10")Integer size){
ModelMap modelMap=new ModelMap();
PageInfo<Movie> moviePageInfo = movieService.PHfindAll(page, size);
modelMap.addAttribute("PHmovielist",moviePageInfo);
ModelAndView mv=new ModelAndView("PHmovie",modelMap);
return mv;
}
}
看一下PageInfo里面存了什么
pageNum | 当前页码 |
pageSize | 每页显示多少条数据 |
size | 当前页显示多少条数据 |
startRow | 第几条数据开始显示 |
endRow | 显示到第几条数据 |
total | 总共多少条数据 |
pages | 总共多少页 |
startRow | 第几条数据开始显示 |
list | 查询的数据封装成列表 |
startRow | 第几条数据开始显示 |
prePage | 上一页 |
nextPage | 下一页 |
isFirstPage | 是否第一页 |
isLastPage | 是否最后一页 |
hasPreviousPage | 是否有上一页 |
hasNextPage | 是否有下一页 |
navigatePages | 显示多少个页码 |
navigateFirstPage | 显示的第一个页码 |
navigateLagePage | 显示的最后一个页码 |
navigatepageNums | 将显示的页码封装成列表 |
你需要的都给你装进去了,感不感动
创建jsp页面
效果还是上一篇的效果,直接上代码,相信看过上一篇的朋友会很熟悉
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %><%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2020/4/22
Time: 13:06
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>PHMovie</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css">
<script type="text/javascript" src="http://code.jquery.com/jquery-1.10.0.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js"></script>
<style>
table{
table-layout:fixed;
}
td{
overflow:hidden;
white-space:nowrap;
text-overflow:ellipsis;
}
</style>
<script>
$(function () {
$("#frist").click(function () {
$("#frist").attr("href","../movie/PHfindAll?page=1&&size="+$(".input_text").val()+"")
});
$("#last").click(function () {
$("#last").attr("href","../movie/PHfindAll?page=${PHmovielist.pages}&&size="+$(".input_text").val()+"")
});
$("#pre").click(function () {
$("#pre").attr("href","../movie/PHfindAll?page=${PHmovielist.prePage}&&size="+$(".input_text").val()+"")
});
$("#next").click(function () {
$("#next").attr("href","../movie/PHfindAll?page=${PHmovielist.nextPage}&&size="+$(".input_text").val()+"")
});
});
function change_page(num) {
$(".pagelink").attr("href","../movie/PHfindAll?page="+num+"&&size="+$(".input_text").val()+"")
}
function change_size() {
var input_text=$(".input_text").val();
if(input_text>=1&&input_text<=${PHmovielist.total})
window.location.href="../movie/PHfindAll?page=${PHmovielist.pageNum}&&size="+$(".input_text").val()+"";
else {
alert("请输入正确行数");
$(".input_text").val("${PHmovielist.pageSize}")
}
}
</script>
</head>
<body>
<table class="table table-striped table-bordered table-hover">
<thead>
<tr>
<td >编号</td>
<td>电影名</td>
<td>描述</td>
<td>链接</td>
</tr>
</thead>
<tbody>
<c:forEach items="${PHmovielist.list}" var="movie">
<tr>
<td title="${movie.id}">${movie.id}</td>
<td title="${movie.mname}">${movie.mname}</td>
<td title="${movie.mdesc}">${movie.mdesc}</td>
<td title="${movie.mlink}"><a href="${movie.mlink}">${movie.mlink}</a></td>
</tr>
</c:forEach>
</tbody>
</table>
第${PHmovielist.pageNum}页 总共:${PHmovielist.pages}页/${PHmovielist.total}条 一页显示<input value="${PHmovielist.pageSize}" class="input_text" style="width: 30px" onfocusout="change_size()">条
<c:if test="${!PHmovielist.isFirstPage}" var="result">
<a href="" id="frist">首页</a>
<a href="" id="pre">上一页</a>
</c:if>
<c:forEach items="${PHmovielist.navigatepageNums}" var="i">
<c:if test="${PHmovielist.pageNum != i}" var="result"> <a href="" class="pagelink" onclick="change_page('${i}')">${i}</a> </c:if>
<c:if test="${!result}" var="result"> ${i} </c:if>
</c:forEach>
<c:if test="${!PHmovielist.isLastPage}" var="result">
<a href="" id="next">下一页</a>
<a href="" id="last">尾页</a>
</c:if>
</body>
</html>
结尾
跟着敲到这的盆友会发现,用了PageHelper插件,分页就几秒钟的事了,但是,PageHelper插件固定了每次显示8个页码,怎么改成显示7个、显示10个页码呢?这时候看了我上一篇博客的盆友就懂了。
感觉有用就赏个赞呗~
分完页感觉还是不够自由,下一篇基于分页的模糊查询