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: rootpassword: 123456url: jdbc:mysql://192.168.xx.xx:3306/stock_db?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=false&serverTimezone=Asia/Shanghaidriver-class-name: com.mysql.jdbc.Driver# 初始化时建立物理连接的个数。初始化发生在显示调用 init 方法,或者第一次 getConnection 时initialSize: 6# 最小连接池数量minIdle: 2# 最大连接池数量maxActive: 20# 获取连接时最大等待时间,单位毫秒。配置了 maxWait 之后,缺省启用公平锁,# 并发效率会有所下降,如果需要可以通过配置 useUnfairLock 属性为 true 使用非公平锁。maxWait: 60000mybatis: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 {@Autowiredprivate SysUserMapper sysUserMapper;@Testpublic 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,我们可以在实际项目中轻松实现分页功能,提高开发效率。如果在使用过程中遇到问题,可以参考官方文档或相关技术社区寻求帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/36876.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSS基础汇总

CSS 1. 选择器 标签选择器 通过标签名找标签&#xff08;把指定的样式应用到某一个、组、类标签上&#xff09; id选择器 通过id属性值找标签&#xff0c;关键符号#id值{样式} 复合选择器 1、并列选择器&#xff1a;关键符号&#xff0c;用法&#xff1a;选择器1&#xff0c…

Appium+python自动化(二十九)- 模拟手指在手机上多线多点作战 - 多点触控(超详解)

简介 在网页中我们经常使用缩放操作来便利的查看具体的信息&#xff0c;在appium中使用MultiAction多点触控的类来实现。MultiAction是多点触控的类&#xff0c;可以模拟用户多点操作。主要包含加载add()和执行perform()两个方法. 问题思考 在使用地图App中&#xff0c;我们…

Lyapunov-Krasovskii泛函三重积分项求导_原理

Lyapunov-Krasovskii泛函三重积分项求导_原理 1 Lyapunov-Krasovskii泛函三重积分项举例2 Lyapunov-Krasovskii泛函三重积分项求导3 基于辅助函数的一重积分不等式4 基于辅助函数的二重积分不等式 本人为研二小白&#xff0c;在看论文的过程中记录一下自己的学习过程和想法。 在…

ORACLE同步数据(dblink+物化视图)

1.创建dblink create public database link xirEvalDBlink connect to "XIR_TRD" identified by "xpar" USING (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST 191.168.0.11)(PORT 1521)) (CONNECT_DATA (SERVER DEDICATED) (SERVICE_NAME orcl) ) )…

nginx 配置页面重定向,并携带链接和参数

期望 将 ip:port//oldPrefix/pages?a1 重定向到ip:port//oldPrefix/targetPrefix?a1 nginx 配置 # 原始前缀 # permanent 重定向 location /oldPrefix/ {rewrite ^/oldPrefix/(.*)$ /targetPrefix/$1 permanent; }# 目标前缀 location /targetPrefix/ {# 相关配置 }

echarts实现堆叠图加折线混合图

vue组件实现代码: <template><div :id="chartId" style="width: 100%; height: 300px"></div> </template><script>import * as echarts from "echarts";export default {name: "doubleStackLine", /…

Embedding 、词嵌入、向量模型说的是一回事么?AI是如何理解世界?AI人不能不看的Embedding白话科普!

在AI理解世界的过程中&#xff0c;向量模型扮演着一个至关重要的角色&#xff0c;甚至可以说它是AI大模型用以构建和理解复杂数据的基础&#xff0c;也是对不同形态数据的一种标准化的“浓缩”。它能够将语言、图像、声音等多样化的信息&#xff0c;转化为一种通用的、数学化的…

pg_rewind实现原理简单分析

pg_rewind的功能是在主备切换后回退旧主库上多余的事务变更&#xff0c;以便可以作为新主的备机和新主建立复制关系。通过pg_rewind可以在故障切换后快速恢复旧主&#xff0c;避免整库重建。对于大库&#xff0c;整库重建会很耗时间。 如何识别旧主上多余的变更&#xff1f; 这…

基于51单片机的银行排队呼叫系统设计

一.硬件方案 本系统是以排队抽号顺序为核心&#xff0c;客户利用客户端抽号&#xff0c;工作人员利用叫号端叫号&#xff1b;通过显示器及时显示当前所叫号数&#xff0c;客户及时了解排队信息&#xff0c;通过合理的程序结构来执行排队抽号。电路主要由51单片机最小系统LCD12…

K8S Pod常见状态

这是自己所遇到 Pod 常见状态及可能原因&#xff0c;持续更新。 如有其他的错误状态&#xff0c;可私我更新 1. ImagePullBackOff 问题分析&#xff1a; 镜像拉取失败。 可能原因&#xff1a; 可能是网络问题导致&#xff0c;检查Pod所在节点是否能够正常访问网络; 镜…

Vue-cli项目及Element UI 环境搭建 保姆级教程

一、Vue-cli介绍及其作用 什么是Vue-cli手脚架 vue-cli 官方提供的一个脚手架&#xff0c;用于快速生成一个 vue 的项目模板&#xff1b;预先定义 好的目录结构及基础代码&#xff0c;就好比咱们在创建 Maven 项目时可以选择创建一个 骨架项目&#xff0c;这个骨架项目就是脚…

electron本地运行请求端口

本地运行&#xff1a; npm run electron:start 运行后项目请求地址为&#xff1a; http://localhost:5173/api/xxxx const {protocol } require(electron); app.commandLine.appendSwitch(--ignore-certificate-errors, true); // Scheme must be registered before the app…

手把手教你玩转AD9361数字调制解调系列(二) ----纯逻辑实现FSK信号的数字调制解调

因最近客户需求&#xff0c;用纯PL实现AD9361的数字信号调制解调&#xff0c;于是就把各种数字调制都在AD9361上都实现了一遍。优点就是&#xff1a;既可以在zynq系列上配置9361&#xff0c;也可以在纯FPGA系列配置9361。并且理解起来比较简单&#xff01;&#xff01;&#xf…

lidar3607.2 雷达点云数据处理软件功能介绍

LiDAR360 是北京数字绿土科技股份有限公司自主研发的点云后处理及行业应用软件。平台可处理 TB 级点云数据&#xff0c;并拥有 10 余种国际领先的点云处理及 AI 算法&#xff0c;推动激光雷达 的多行业应用。700 余项强大且灵活的功能&#xff0c;解决用户最后一公里的应用难题…

云仓是如何发展起来的?

1、电子商务的繁荣&#xff1a; 随着电商的兴起&#xff0c;对高效仓储和物流的需求越来越大。传统的仓储方式难以满足海量订单处理和快速配送的要求&#xff0c;因此需要一种更加灵活和高效的仓储解决方案。 ------------------------------------------------- 2、科技进步…

速盾:cdn动态加速上传

CDN&#xff08;Content Delivery Network&#xff0c;内容分发网络&#xff09;是一种通过在全球范围内分布的服务器群组来提供高速、可靠内容传递的技术。CDN在网络上广泛应用&#xff0c;可以加速网站中的静态内容和动态内容的传输&#xff0c;并提高用户的访问速度和体验。…

Nuxt 的路由结构系统(七)

基本路由配置 在 Nuxt.js 中&#xff0c;每个 .vue 文件在 pages/ 目录下都会自动成为一个路由。文件名决定了路由的路径。例如&#xff1a; pages/ |-- index.vue # 映射到根路径 / |-- about.vue # 映射到路径 /about |-- contact.vue # 映射到路径 /conta…

Git clone解释

git clone gitgithub.com:tancolo/MOOC.git 是一个 Git 命令&#xff0c;用于从远程 Git 仓库复制一个仓库到本地计算机。下面我将详细解释这个命令的各个部分及其作用&#xff1a; git clone&#xff1a; 这是一个 Git 命令&#xff0c;用于从远程仓库克隆&#xff08;复制&am…

罗盘复杂网络教程—3步轻松构建社团检测任务

作为复杂网络领域中重要的课题之一&#xff0c;社团检测有助于揭示网络中存在的功能性模块或群集&#xff0c;旨在于仅利用网络中蕴含的来识别模块&#xff0c;并可能进而识别它们的层次组织。社团检测在各个领域具有重要的应用&#xff0c;可以帮助深入理解复杂系统潜在的模式…

一键进阶ComfyUI!懂AI的设计师现在都在用的节点式Stable Diffusion

前言 _ 万字教程&#xff01;奶奶看了都会的 ComfyUI 入门教程 推荐阅读 一、川言川语 大家好&#xff0c;我是言川。 阅读文章 > ](https://www.uisdc.com/comfyui-3) 目前使用 Stable Diffusion 进行创作的工具主要有两个&#xff1a;WebUI 和 ComfyUI。而更晚出现的…