Pagehelper超级好用的分页插件

目录

一:pagehelper介绍

二:pagehelper使用

2.1导入pagehelper依赖

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

2.3 配置Mybatis

2.4编写Mapper和xml文件

 三:常见问题及解决方案


一: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,我们可以在实际项目中轻松实现分页功能,提高开发效率。如果在使用过程中遇到问题,可以参考官方文档或相关技术社区寻求帮助。

  • 22
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PageHelper分页插件是一个用于在项目中实现分页的工具。通过在项目的pom.xml文件中添加PageHelper的依赖jar包,我们可以在代码中使用PageHelper提供的方法来实现分页功能。相比以前手动设置分页参数的方式,使用PageHelper可以简化代码的编写,提高开发效率。 在使用PageHelper进行分页时,我们不需要传入分页参数如page和size,而是直接返回一个Page对象,该对象包含了分页的结果数据和相关的分页信息。通过调用Page对象的方法,我们可以获取当前页的数据、总页数、总记录数等信息。同时,PageHelper还提供了一些辅助方法,如设置分页起始页码、每页显示的数据量等,以满足不同需求的分页操作。 总之,PageHelper分页插件为我们提供了一种简单、方便的方式来实现分页功能,使得我们可以更轻松地处理大量数据的分页显示需求。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [PageHelper分页插件实现](https://blog.csdn.net/lesliesuai/article/details/117902319)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [PageHelper分页插件的简单使用](https://blog.csdn.net/qq_42640067/article/details/111938795)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值