毕设IDEA2019之ssm快速分页功能(PageHelper插件)

上一篇详细介绍了如何凭实力分页,但是在框架插件盛行的今天,自己敲分页的功能就太不方便了(就是懒),秉着拿来主义精神,既然已经有人帮我们封装这些分页方法了,不拿来用就说不过去了(就是懒!),下面就介绍一下常用的分页插件——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}&nbsp;总共:${PHmovielist.pages}页/${PHmovielist.total}&nbsp;一页显示<input value="${PHmovielist.pageSize}" class="input_text" style="width: 30px" onfocusout="change_size()">&nbsp;
    <c:if test="${!PHmovielist.isFirstPage}" var="result">
        <a href="" id="frist">首页</a>&nbsp;
        <a href="" id="pre">上一页</a>&nbsp;
    </c:if>
    <c:forEach items="${PHmovielist.navigatepageNums}" var="i">
        <c:if test="${PHmovielist.pageNum != i}" var="result">&nbsp;<a href="" class="pagelink" onclick="change_page('${i}')">${i}</a>&nbsp;</c:if>
        <c:if test="${!result}" var="result">&nbsp;${i}&nbsp;</c:if>
    </c:forEach>
    <c:if test="${!PHmovielist.isLastPage}" var="result">
        <a href="" id="next">下一页</a>&nbsp;
        <a href="" id="last">尾页</a>
    </c:if>
</body>
</html>

在这里插入图片描述

结尾

跟着敲到这的盆友会发现,用了PageHelper插件,分页就几秒钟的事了,但是,PageHelper插件固定了每次显示8个页码,怎么改成显示7个、显示10个页码呢?这时候看了我上一篇博客的盆友就懂了。

感觉有用就赏个赞呗~

分完页感觉还是不够自由,下一篇基于分页的模糊查询

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值