当前位置: 首页 > news >正文

Mybatis08-使用pageHelper

一、什么是分页

1-1、传参

页码:pageNum(用户会发送请求,携带页码 pageNum 给服务器.)

每页显示的记录条数:pageSize,例如百度默认就是每页展示 10 条记录。

实际上每一次在进行分页请求发送的时候,都是要发送两个数据的:

  1. 页码 pageNum 要传送给服务器。
  2. 每页显示的记录条数 pageSize 也要传送给服务器。

前端提交表单的话,数据格式:

uri?pageNum=1&pageSize=10

1-2、关于mysql当中的分页sql应该怎么写?

limit关键字。

limit 语法格式:

limit 开始下标,显示的记录条数,

示例:limit startIndex, pageSize(从第startIndex条开始,显示pageSize条)

select * from t_car limit 0, 3;

select * from t_car limit 2; 和 select * from t_car limit 0, 2;是等效的。

mysql当中起始行的下标从0开始。第一条记录的下标是0。

二、使用 PageHelper 插件(推荐)

PageHelper 是 MyBatis 最常用的分页插件,它通过拦截器方式,在执行 SQL 前自动在语句后追加 LIMITOFFSET,从而达到分页的目的。

它的核心原理是拦截 Executor.query() 方法,对 SQL 动态改写。

1. 添加依赖(Maven)

<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.3.2</version>
</dependency>

 2、在 mybatis-config.xml中添加拦截器

<plugins><plugin interceptor="com.github.pagehelper.PageInterceptor"><property name="helperDialect" value="mysql" /><property name="reasonable" value="true" /></plugin>
</plugins>

配置结构说明

  • <plugins> 是 MyBatis 插件扩展点

  • <plugin> 是指注册一个分页拦截器(PageInterceptor

  • 每个 <property> 都是对插件行为的控制


(1)、helperDialect="mysql"

指定数据库方言,也就是 PageHelper 应该为哪种数据库生成分页语句

对应数据库
mysqlMySQL、MariaDB
oracleOracle
mssqlSQL Server
postgresqlPostgreSQL
sqliteSQLite

建议:明确指定 mysql,避免自动识别出错。


(2)、reasonable="true"

是否启用 分页参数合理化机制,常用于防止越界问题。

启用后(true)的行为:

情况结果
pageNum ≤ 0自动使用第一页(pageNum = 1)
pageNum > 最大页自动使用最后一页
pageSize ≤ 0查所有记录

示例:

PageHelper.startPage(-1, 10); // 实际使用 pageNum = 1
PageHelper.startPage(9999, 10); // 如果最大页是 50,会用 pageNum = 50

推荐开启,防止前端传参错导致崩溃或空页。

 

3. 基本用法

你只需要在查询之前调用:

startPage 会自动修改 SQL,加上 LIMIT 和 OFFSET,配合 PageInfo 拿到分页数据和总页数等信息。

【注意】:

一定要在执行sql语句之前加上:PageHelper.startPage(pageNum, pageSize);

控制台执行的sql语句会自动加上limit分页

4. PageInfo 的使用(封装分页结果)

PageInfo<Car> pageInfo = new PageInfo<>(cars);

直接将查询结果给到pageInfo即可 

方法返回值含义
getTotal()long总记录数
getPages()int总页数
getPageNum()int当前页码
getPageSize()int每页大小
getList()List当前页的数据列表
isHasNextPage()boolean是否有下一页
isIsLastPage()boolean是否是最后一页

5、XML 文件中的配合使用

你的 XML 中写的仍是普通 SQL:

分页逻辑由 Java 代码调用 PageHelper.startPage() 控制,XML 无需修改

http://www.dtcms.com/a/282989.html

相关文章:

  • 本地 AI 问答机器人搭建项目(Ollama + Qwen-7B + LangChain + FastAPI)
  • AI对话聊天与桌宠工具调研报告
  • 【案例分享】基于FastCAE-Acoustics软件对车门进行噪声预测
  • 移动平板电脑安全管控方案
  • 祥云系统开源云商城程序全开源版 个人程序云商城(源码下载)
  • 前端学习7:CSS过渡与动画--补间动画 (Transition) vs 关键帧动画 (Animation)
  • xss-lab1-8关
  • AdsPower 功能详解 | 应用中心使用指南:插件统一管理更高效、更安全!
  • [NOIP][C++] 树的重心
  • 精彩代码分析-1
  • 深入探讨机器学习中的过拟合:从VC维到正则化的贝叶斯视角
  • Alamofire 网络请求全流解析,通俗易懂
  • 降本增效利器:汽车制造中EtherCAT转PROFIBUS DP网关应用探析
  • Linux权限管理:玩转root与用户组
  • 前端 oidc-client 静默刷新一直提示:Error: Frame window timed out 问题分析与解决方案
  • 前端上传 各类 文件 ,前端自己解析出来 生成界面 然后支持编辑(增强版 支持大多数文件格式的在线编辑)
  • React Native 在 Web 前端跨平台开发中的优势与实践
  • Windows下编译pthreads
  • vue-router 导航式编程 参数的设置
  • 优学教育官网搭建02课程中心
  • vscode Cline接入火山引擎的Deepseek R1
  • 项目资源预算分散,如何实现协同整合?
  • orfeotoolbox ResetMargin
  • 《小白学习产品经理》第五章:方法论之波士顿矩阵
  • Linux中的GDB的作用与GCC的区别
  • 设计一款用于捕捉动态产品视频的摄像机器人
  • 《透视定轴:CSS 3D魔方中视觉层级的秩序法则》
  • Linux下操作SQL SERVER
  • sqli-labs通关笔记-第03关 GET字符型注入(单引号括号闭合 手工注入+脚本注入两种方法)
  • github上传大文件