PageHelper分页的学习(一)

PageHelper分页的学习(一)

   在编写项目中,时常需要对来自后台返回的数据进行表格显示,当数据很多时,就需要进行分页,因为你总不能让用户一直往下滑动,这样很恶心。需要实现的就像是这样的操作界面。

 

 (图片来自:layuimini的数据表格),就像是上面的样子,可以实现很好的数据交互。

 

  那如何搞这个事情呢?

  首先,构建项目,这里我就很简单的项目就是为了学习这个分页所构建的简单的ssm的Maven项目(当然了,现在的前端框架也有实现分页,就像上面,不需要你写,但是你不写学习自己搞一个吗,也不要总是用别人的框架,是在不行用插件也可以)

  1、在pom.xml文件中添加分页插件

        <!--    添加分页插件    -->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.1.2</version>
        </dependency>

  2、创建数据库,创建数据表,添加数据

CREATE TABLE `students` (
  `studentID` int NOT NULL,
  `studentName` varchar(11) DEFAULT NULL,
  `studentSex` varchar(11) DEFAULT NULL,
  `studentPhone` varchar(11) DEFAULT NULL,
  `studentAddress` varchar(11) DEFAULT NULL,
  `studentProfession` varchar(11) DEFAULT NULL,
  `studentGrade` varchar(11) DEFAULT NULL,
  PRIMARY KEY (`studentID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

  插入了23条数据

insert into students values(1,'张三1','','188888888','陕西省','软件工程','大三');
insert into students values(2,'张三2','','188888888','陕西省','软件工程','大三');
insert into students values(3,'张三3','','188888888','陕西省','软件工程','大三');
......

  3、创建实体类

import lombok.Data;

@Data
public class Students {

    private Integer studentID;
    private String studentName;
    private String studentSex;
    private String studentPhone;
    private String studentAddress;
    private String studentProfession;
    private String studentGrade;
}

  4、构建ssm框架(这里不做说明了)

  但是在这里需要说明一个情况:就是我在添加了PageHelper的分页插件后,需要在SqlSessionFactoryBean中设置分页插件。

<!--    配置数据工厂sqlsessionfactory  -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
<!--        配置分页插件-->
        <property name="plugins">
            <array>
                <bean class="com.github.pagehelper.PageInterceptor">
                    <property name="properties" value="reasonable=false"></property>
                </bean>
            </array>
        </property>
    </bean>

  这里有一个参数需要注意,就是reasonable参数,默认是false,这个参数的作用是分页的合理化参数。啥意思?就是当你需要查询的页数,在[开始页数,结束页数]之间,就正常显示,若是出现你需要查询的页数下雨开始页数或大于结束页数的话,就会分别显示第一页与最后一页。

  举例:就像我上面的信息数据表,我实质上最多显示5页,第五页是3条数据,但是我要是设置了true的话,即使我传入页数是7也会给我显示最后一页,也就是时刻会保持页面上有数据;但是若是设置为false,那就智慧按照你传入的页数显示,这个时候,页数为7就没有数据,页面就没有数据。

  5、mapper

import java.util.List;

public interface StudentsMapper {

    /**
     * 查询所有的学生信息
     */
    List<Students> getAllStudent();
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.hui.mapper.StudentsMapper" >

    <select id="getAllStudent" resultType="com.hui.pojo.Students">
        select * from splitpage.students
    </select>
</mapper>

(注意: 在这里如果使用分页插件的话,后话是会自动添加LIMIT关键字的,所以不能最后填上分号;得要吧分号去掉

  6、service

import java.util.List;

public interface StudentsService {

    /**
     * 查询所有的学生
     */
    List<Students> getAllStudentService();
    /**
     * 根据分页查询数据
     */
    PageInfo getStudentBySplitService(int splitPage, int pageSize);
}
    /**
     * 通过分页查询数据
     * @return
     */
    public PageInfo getStudentBySplitService(int splitPage,int pageSize) {

        PageHelper.startPage(splitPage,pageSize);
        List<Students> allStudent = studentsMapper.getAllStudent();
        PageInfo<Students> pageInfo = new PageInfo<Students>(allStudent);
        return pageInfo;

    }

  在业务层,进行对页的起始页数,与页的显示的条数进行操作,使用PageHelper进行分页设置(底层就是在SQL语句中添加了LIMIT关键字),然后从数据库中查找所有的相关信息,然后使用PageInfo进行对返回的list集合的对象进行封装成PageInfo对象,以便对其中的众多信息进行获取。

  7、controller

    /**
     * 分页显示,显示第一页的5条数据
     */
    @RequestMapping("/splitpage/{startPage}")
    public String getStudentBySplitPage(HttpServletRequest request,@PathVariable int startPage) {

        PageInfo pageInfo = studentsService.getStudentBySplitService(startPage, PAGE_SIZE);
        request.setAttribute("pageInfo",pageInfo);
        return "splitPage";
    }

  在controller层将PageInfo的对象添加到前台中

  8、jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %>
<html>
<head>
    <title>分页测试</title>
</head>
<body>

<table style="width: 70%;margin: 30px auto;">
    <tr style="border-bottom: 1px solid black">
        <th>学号</th>
        <th>姓名</th>
        <th>性别</th>
        <th>手机号</th>
        <th>地址</th>
        <th>专业</th>
        <th>年级</th>
    </tr>
    <br>
    <c:forEach items="${requestScope.pageInfo.list}" var="info">
                获取其中的集合对象,需要在pageInfo对象下使用list得到集合对象 <tr style="border-bottom: 1px solid black"> <th>${info.studentID}</th> <th>${info.studentName}</th> <th>${info.studentSex}</th> <th>${info.studentPhone}</th> <th>${info.studentAddress}</th> <th>${info.studentProfession}</th> <th>${info.studentGrade}</th> </tr> </c:forEach> </table> </body> </html>

  做到现在的实现结果就只是将数据进行分页显示,但是还没有实现动态的互动,也就是说,每一页的大小是固定的,显示第几页也是我用参数传递进去的,那显然这样是不行的啊。参数的改变也是通过地址栏中的数字进行改变的。

  结果:

    我后续的操作还需要添加分页的按钮,点击不同的按钮实现分页,这个我得下一篇文章会说清楚。

 

posted @ 2021-11-08 21:18  心向未来  Views(124)  Comments(0)    收藏  举报