Pagehelper超级好用的分页插件

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
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,我们可以在实际项目中轻松实现分页功能,提高开发效率。如果在使用过程中遇到问题,可以参考官方文档或相关技术社区寻求帮助。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
SQL Java 数据库连接
【mybatis】第一篇,Springboot中使用插件PageHelper不生效解决方案
【mybatis】第一篇,Springboot中使用插件PageHelper不生效解决方案
|
SQL XML Java
8、Mybatis-Plus 分页插件、自定义分页
这篇文章介绍了Mybatis-Plus的分页功能,包括如何配置分页插件、使用Mybatis-Plus提供的Page对象进行分页查询,以及如何在XML中自定义分页SQL。文章通过具体的代码示例和测试结果,展示了分页插件的使用和自定义分页的方法。
8、Mybatis-Plus 分页插件、自定义分页
|
SQL Java 关系型数据库
PageHelper分页插件最新源码解读及使用
PageHelper分页插件最新源码解读及使用
|
消息中间件 JSON Java
Spring Boot、Spring Cloud与Spring Cloud Alibaba版本对应关系
Spring Boot、Spring Cloud与Spring Cloud Alibaba版本对应关系
23869 0
|
前端开发 小程序 Java
【规范】SpringBoot接口返回结果及异常统一处理,这样封装才优雅
本文详细介绍了如何在SpringBoot项目中统一处理接口返回结果及全局异常。首先,通过封装`ResponseResult`类,实现了接口返回结果的规范化,包括状态码、状态信息、返回信息和数据等字段,提供了多种成功和失败的返回方法。其次,利用`@RestControllerAdvice`和`@ExceptionHandler`注解配置全局异常处理,捕获并友好地处理各种异常信息。
5661 0
【规范】SpringBoot接口返回结果及异常统一处理,这样封装才优雅
|
缓存 监控 安全
Spring AOP 详细深入讲解+代码示例
Spring AOP(Aspect-Oriented Programming)是Spring框架提供的一种面向切面编程的技术。它通过将横切关注点(例如日志记录、事务管理、安全性检查等)从主业务逻辑代码中分离出来,以模块化的方式实现对这些关注点的管理和重用。 在Spring AOP中,切面(Aspect)是一个模块化的关注点,它可以跨越多个对象,例如日志记录、事务管理等。切面通过定义切点(Pointcut)和增强(Advice)来介入目标对象的方法执行过程。 切点是一个表达式,用于匹配目标对象的一组方法,在这些方法执行时切面会被触发。增强则定义了切面在目标对象方法执行前、执行后或抛出异常时所
16359 4
|
Java 数据库连接 mybatis
成功解决: Invalid bound statement (not found) 在已经使用mybatis的项目里引入mybatis-plus,结果不能共存的解决
这篇文章讨论了在已使用MyBatis的项目中引入MyBatis-Plus后出现的"Invalid bound statement (not found)"错误,并提供了解决方法,主要是通过修改yml配置文件来解决MyBatis和MyBatis-Plus共存时的冲突问题。
成功解决: Invalid bound statement (not found) 在已经使用mybatis的项目里引入mybatis-plus,结果不能共存的解决
|
12月前
|
SQL XML Java
springboot整合mybatis-plus及mybatis-plus分页插件的使用
这篇文章介绍了如何在Spring Boot项目中整合MyBatis-Plus及其分页插件,包括依赖引入、配置文件编写、SQL表创建、Mapper层、Service层、Controller层的创建,以及分页插件的使用和数据展示HTML页面的编写。
springboot整合mybatis-plus及mybatis-plus分页插件的使用
|
Java 编译器 Spring
面试突击78:@Autowired 和 @Resource 有什么区别?
面试突击78:@Autowired 和 @Resource 有什么区别?
14998 5
|
SQL 缓存 JavaScript
PageHelper 使用中的一些坑
PageHelper 使用中的一些坑
PageHelper 使用中的一些坑

热门文章

最新文章