如何使用PageHelper插件完成常见分页操作

一、导入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>
                &nbsp; | &nbsp;
                <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>
                &nbsp; | &nbsp;
                <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>

八、运行结果

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

田思雨》

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值