Mybatis实现分页查询之PageHelper的使用及参数说明

2 篇文章 0 订阅

PageHelper应用原理?

PageHelper底层基于mybatis框架中的拦截器规范,做了一个分页拦截器的具体实现,假如我们调用了PageHelper.startPage()方法,底层会在mybatis层面启动一拦截器,在拦截器中对sql查询进行拦截,拦截到sql以后,对sql进行处理

在这里插入图片描述

pom.xml配置

<!-- pagehelper -->
<!-- 版本使用参考MVNrepository -->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot</artifactId>
    <version>1.3.0</version>
</dependency>

自定义工具类

ServletUtil

为获取Request对象,提供了便利,代码如下

package com.cy.pj.common.util;

import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;

/***
 * 通过此工具类获取请求,响应等对象信息
 */
public class ServletUtil {

    /**获取请求对象*/
    public static HttpServletRequest getRequest(){
        return getServletRequestAttributes().getRequest();
    }
    /**通过RequestContextHolder类型获取请求属性*/
    public static ServletRequestAttributes getServletRequestAttributes(){
        return (ServletRequestAttributes)
                RequestContextHolder.getRequestAttributes();
    }
}
//拿到请请求后绑定到ThreadLocal中

StringUtil

提供了对字符串是否为空串的逻辑判断:

package com.cy.pj.common.util;

public class StringUtil {
    public static boolean isEmpty(String str){
        return str==null||"".equals(str);
    }
}

PageUtil

工具类可以获取请求对象,基于请求对象,获取请求中分页参数,然后启动分页查询:

package com.cy.pj.common.util;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;

import javax.servlet.http.HttpServletRequest;

public class PageUtil {
    /**
     * 通过此方法启动分页查询
     * @param <T> 这里的T为泛型,返回值类型左侧有<T>这种符号的表示方法为泛型方法
     * @return
     */
      public static <T>Page<T> startPage(){
      	  //通过自定义工具类获取Request对象
          HttpServletRequest request= ServletUtil.getRequest();
          
          //页面大小(每页最多显示多少条记录)
          String pageSizeStr=request.getParameter("pageSize");
          //当前页码值(要查第几页的数据)
          String pageCurrentStr=request.getParameter("pageCurrent");
          
          //在此位置调用PageHelper中的一个方法启动分页
          //在项目中去添加一个PageHelper依赖(后缀是starter的)
          Integer pageCurrent=
                  StringUtil.isEmpty(pageCurrentStr)?1:Integer.parseInt(pageCurrentStr);
          Integer pageSize=
                  StringUtil.isEmpty(pageSizeStr)?10:Integer.parseInt(pageSizeStr);
          //启动PageHelper中的分页拦截器(PageInterceptor)
         return PageHelper.startPage(pageCurrent,pageSize);
      }
}

启动分页查询

在这里插入图片描述

@GetMapping
public JsonResult doFindLogs(SysLog sysLog){
	return new JsonResult(
	PageUtil.startPage().doSelectPageInfo(
	newISelect() {
	@Override
	public void doSelect() {
	sysLogService.findLogs(sysLog);         
  }   
 }));
}

查询结果PageInfo参数说明:

//当前页
    private int pageNum;
    //每页的数量
    private int pageSize;
    //当前页的数量
    private int size;
 
    //由于startRow和endRow不常用,这里说个具体的用法
    //可以在页面中"显示startRow到endRow 共size条数据"
 
    //当前页面第一个元素在数据库中的行号
    private int startRow;
    //当前页面最后一个元素在数据库中的行号
    private int endRow;
    //总记录数
    private long total;
    //总页数
    private int pages;
    //结果集
    private List<T> list;
 
    //前一页
    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;
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MyBatis PageHelper 是一个 MyBatis 分页插件,能够快速、便捷的进行分页查询,支持多种数据库使用 PageHelper 可以避免手写 SQL 语句进行分页操作,同时 PageHelper 支持物理分页和逻辑分页两种方式。 下面是使用 PageHelper 进行分页查询的步骤: 1. 导入 PageHelper 依赖 Maven 项目在 pom.xml 文件中添加以下依赖: ``` <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.1.11</version> </dependency> ``` 2. 配置 PageHelperMyBatis 的配置文件中添加以下配置: ``` <plugins> <plugin interceptor="com.github.pagehelper.PageInterceptor"> <property name="dialect" value="mysql"/> </plugin> </plugins> ``` 其中 dialect 属性指定了数据库类型,PageHelper 支持的数据库类型包括:oracle、mysql、mariadb、sqlite、hsqldb、postgresql、db2、sqlserver、informix、达梦、人大金仓、南大通用、神通、PostgreSQL9.3-9.5。 3. 使用 PageHelper 进行分页查询 在需要进行分页查询的方法中使用 PageHelper.startPage 方法进行分页设置,然后调用查询方法获取查询结果。例如: ``` PageHelper.startPage(1, 10); // 第一页,每页显示 10 条记录 List<User> userList = userDao.selectUserList(); // 查询用户列表 PageInfo<User> pageInfo = new PageInfo<>(userList); // 封装分页结果 ``` 其中 PageHelper.startPage 方法接收两个参数,第一个参数为当前页码,第二个参数为每页显示的记录数。 最后使用 PageInfo 类对查询结果进行封装,得到分页结果。PageInfo 类中包含了分页信息和查询结果。 以上就是使用 MyBatis PageHelper 进行分页查询的基本步骤。需要注意的是,在使用 PageHelper 进行分页查询时,需要确保查询语句中不要使用 limit 关键字。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值