Pagehelper超级好用的分页插件

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Pagehelper超级好用的分页插件

一:pagehelper介绍

PageHelper是一款基于MyBatis的分页插件,它简化了分页查询逻辑的编写,支持多种分页方式和结果集排序、筛选等操作。PageHelper的主要特点和功能包括:

1.无侵入性:使用PageHelper进行分页处理时,不需要修改原有的SQL语句、Mapper接口和XML文件,保持了MyBatis的原有使用习惯。

2.易用性:通过引入相关依赖和简单的配置,即可实现分页功能,无需编写复杂的分页逻辑代码。

3.强大功能:支持多种数据库,能够处理复杂的分页查询功能,如排序、聚合查询、连表查询等。

4.高度自定义:提供了丰富的配置选项和自定义拦截器,可以根据实际需要进行灵活的设置。

PageHelper的工作原理主要依赖于拦截MyBatis的查询操作,在查询前设置分页参数,并在执行SQL语句时动态添加分页逻辑,从而实现分页查询。它通过修改当前执行的SQL语句来添加分页条件,执行添加了分页条件的SQL语句,最终返回分页后的结果集。

此外,PageHelper还提供了详细的配置选项和默认参数支持,如pagehelper.reasonable、pagehelper.defaultCount等,用户可以根据自己的需求进行配置。在整合PageHelper到项目中时,需要确保已经正确导入了MyBatis的依赖,并且按照官方文档的指引进行依赖的引入和配置。

总的来说,PageHelper是一款功能强大且易于使用的MyBatis分页插件,它大大简化了分页查询的实现过程,提高了开发效率,是Java项目中实现分页功能的常用工具之一。

二:pagehelper使用

2.1导入pagehelper依赖

 <!--pagehelper分页插件-->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
        </dependency>

2.2在resources资源下配置application.yml配置文件

 
#配置分页插件
pagehelper:
  helper-dialect: mysql 
  reasonable: true 

helper-dialect:配置分页插件的方言即你使用的什么数据库则就用什么数据库

reasonable:true #开启合理查询:即若超过最大页跳到最后一页,若查询-1页,默认查询第一页

当然你也而可以在application.yml配置pagehelper的其他参数如下:

support-methods-arguments:支持通过Mapper接口参数来传递分页参数。

params:指定count查询的参数名称。

2.3 配置Mybatis

在application.yml文件下配置数据库相关文件

spring:
  # 配置mysql数据源
  datasource:
     druid:
       username: root
       password: 123456
       url: jdbc:mysql://192.168.xx.xx:3306/stock_db?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=false&serverTimezone=Asia/Shanghai
       driver-class-name: com.mysql.jdbc.Driver
       # 初始化时建立物理连接的个数。初始化发生在显示调用 init 方法,或者第一次 getConnection 时
       initialSize: 6
       # 最小连接池数量
       minIdle: 2
       # 最大连接池数量
       maxActive: 20
       # 获取连接时最大等待时间,单位毫秒。配置了 maxWait 之后,缺省启用公平锁,
       # 并发效率会有所下降,如果需要可以通过配置 useUnfairLock 属性为 true 使用非公平锁。
       maxWait: 60000
 
mybatis:
  mapper-locations: classpath:mapper/*.xml #配置加载mapper资源
  configuration:
  map-underscore-to-camel-case: true #开启驼峰映射
  log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #通过mybatis执行的sql代码以日志的形式输出到终端
  type-aliases-package: com.lcyy.stock.pojo #批量给实体类取别名,方便xml中直接使用别名,避免冗余配置

以上的mybatis的配置源,配置了mybatis的基本数据源,例如开启驼峰映射,配置记载mybatis的资源,并且使用了数据库连接池。

2.4编写Mapper和xml文件

为了实现pagehelper,定义一个用户信息的实体类

@Data
@ApiModel("用户的基本信息封装")
public class SysUser implements Serializable {
    /**
     * 用户id
     */
    @ApiModelProperty(value = "用户主键ID")
    private Long id;
 
    /**
     * 账户
     */
    @ApiModelProperty(value = "用户的姓名")
    private String username;
 
    /**
     * 用户密码密文
     */
    @ApiModelProperty(value = "用户的密码")
    private String password;
 
    /**
     * 手机号码
     */
    @ApiModelProperty(value = "用户的手机号")
    private String phone;
 
    /**
     * 真实名称
     */
    @ApiModelProperty(value = "用户的真实姓名")
    private String realName;
 
    /**
     * 昵称
     */
    @ApiModelProperty(value = "用户的昵称")
    private String nickName;
 
    /**
     * 邮箱(唯一)
     */
    @ApiModelProperty(value = "用户的邮箱并且是唯一的")
    private String email;
 
    /**
     * 账户状态(1.正常 2.锁定 )
     */
    @ApiModelProperty(value = "用户的账户状态:1是正常,2是锁定")
    private Integer status;
 
    /**
     * 性别(1.男 2.女)
     */
    @ApiModelProperty(value = "用户的性别,1是男,2是女")
    private Integer sex;
 
    /**
     * 是否删除(1未删除;0已删除)
     */
    @ApiModelProperty(value = "是否删除,1是未删除,0是已删除")
    private Integer deleted;
 
    /**
     * 创建人
     */
    @ApiModelProperty(value = "创建人是谁")
    private Long createId;
 
    /**
     * 更新人
     */
    @ApiModelProperty(value = "更新人是谁")
    private Long updateId;
 
    /**
     * 创建来源(1.web 2.android 3.ios )
     */
    @ApiModelProperty(value = "创建的来源,1是web,2是android,3是ios")
    private Integer createWhere;
 
    /**
     * 创建时间
     */
    @ApiModelProperty(value = "创建的时间")
    private Date createTime;
 
    /**
     * 更新时间
     */
    @ApiModelProperty(value = "更新的时间")
    private Date updateTime;
 
    @ApiModelProperty(value = "常量")
    private static final long serialVersionUID = 1L;
}

对应的mapper接口如下:

/**
* @author dlwlrma
* @description 针对表【sys_user(用户表)】的数据库操作Mapper
* @createDate 2024-06-18 21:48:00
* @Entity com.lcyy.stock.pojo.entity.SysUser
*/
public interface SysUserMapper {
 
    int deleteByPrimaryKey(Long id);
 
    int insert(SysUser record);
 
    int insertSelective(SysUser record);
 
    SysUser selectByPrimaryKey(Long id);
 
    int updateByPrimaryKeySelective(SysUser record);
 
    int updateByPrimaryKey(SysUser record);
 
    SysUser findUserInfoByUserName(@Param("userName") String userName);
    //查询所有信息
    List<SysUser> findAll();
 
}

对用的测试类如下:

/**
 * @author: dlwlrma
 * @data 2024年06月22日 15:01
 * @Description: TODO: 测试分页
 */
 
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.lcyy.stock.mapper.SysUserMapper;
import com.lcyy.stock.pojo.entity.SysUser;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
 
import java.util.List;
 
@SpringBootTest
public class TestPageHelper {
 
    @Autowired
    private SysUserMapper sysUserMapper;
 
    @Test
    public void test01(){
        //当前页
        Integer page = 2;
        //当前页大小
        Integer PageSize = 5;
        PageHelper.startPage(page,PageSize);
        List<SysUser> all1 = sysUserMapper.findAll();
        //将查询到的all1对象封装到pageInfo中,可以查看分页的各种数据
        PageInfo<SysUser> pageInfo = new PageInfo<>(all1);
        int pages = pageInfo.getPages();
        int pageSize = pageInfo.getPageSize();
        int size = pageInfo.getSize();
        System.out.println(pages+"------"+pageSize+"----"+size);
        List<SysUser> all = all1;
        System.out.println(all);
    }
 
}

在测试类我们就基本上实现了pagehelper的基本分页功能。

三:常见问题及解决方案

尽管PageHelper使用起来相对简单,但在实际应用中仍然可能遇到一些问题。以下是几个常见问题及其解决方法:

分页无效或查询结果为空

确保在调用分页查询方法前,已经正确调用了PageHelper.startPage方法。

检查数据库连接是否正常,SQL查询语句是否正确。

分页参数不生效

检查Controller层是否正确接收并传递了分页参数。

确保application.yml中配置的support-methods-arguments为true。

性能问题

对于大数据量的表,分页查询可能会带来性能问题。可以通过增加索引、优化SQL查询等方式提高性能。

四:总结

SpringBoot中正确集成PageHelper,帮助开发者避开常见误区,实现高效的分页查询功能。通过合理配置和正确使用PageHelper,我们可以在实际项目中轻松实现分页功能,提高开发效率。如果在使用过程中遇到问题,可以参考官方文档或相关技术社区寻求帮助。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4月前
springboot2.4.5使用pagehelper分页插件
springboot2.4.5使用pagehelper分页插件
134 0
|
5月前
|
SQL Java 关系型数据库
PageHelper分页插件最新源码解读及使用
PageHelper分页插件最新源码解读及使用
|
5月前
pagehelper分页插件
pagehelper分页插件
59 0
|
SQL Java 数据库连接
PageHelper分页插件的使用
PageHelper分页插件的使用
203 0
|
前端开发 Java 关系型数据库
详解Mybatis之分页插件【PageHelper】
详解Mybatis之分页插件【PageHelper】
|
Oracle 关系型数据库 Java
|
SQL 前端开发 Java
7、PageHelper分页介绍
查询要实现分页、会存在多表关联查询,所以建议使用mybatis实现我的课程查询。 单表查询直接用Spring Data JPA,多表关联查询使用Mybatis有利于后期优化处理。
246 0
7、PageHelper分页介绍
|
XML SQL Java
Mybatis分页插件PageHelper的学习与使用
Mybatis分页插件PageHelper的学习与使用
Mybatis分页插件PageHelper的学习与使用
|
Java Maven
springmvc+mybatis集成PageHelper分页插件
springmvc+mybatis集成PageHelper分页插件
272 0
springmvc+mybatis集成PageHelper分页插件
Zp
|
Java
SpringBoot整合分页插件PageHelper
SpringBoot整合分页插件PageHelper
Zp
434 0