PageHelper分页插件-以三层架构模型开发为例

文章目录

  • 1、简介
  • 2、使用
    • 2.1、导入
      • 2.1.1、SpringBoot
      • 2.1.2、非SpringBoot
    • 2.2、controller
    • 2.3、service
    • 2.4、mapper

​🍃作者介绍:双非本科大三网络工程专业在读,阿里云专家博主,专注于Java领域学习,擅长web应用开发、数据结构和算法,初步涉猎Python人工智能开发和前端开发。
🦅主页:@逐梦苍穹
📕项目专栏:您的一键三连,是我创作的最大动力🌹

1、简介

PageHelper是Mybatis提供的分页插件。

官网:https://pagehelper.github.io/

如果不使用PageHelper分页插件,则开发者需要:

(1)使用MySQL中的limit实现查询第几页的时候,需要计算查询第几个到第几个。这步容易算错;
(2)需要计算总记录数,这需要额外的创建一个SQL语句来获取记录总数;
(3)得到总数后,需要根据每页显示几条数据,来计算总页数,当前页是哪一页,上一页是哪一页,下一页是哪一页……这些信息都获取后,才能在前台展现;

使用PageHelper分页插件则没有这些问题。

2、使用

这里以黑马苍穹外卖项目(SpringBoot项目)中的员工分页查询为例

2.1、导入

2.1.1、SpringBoot

<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.3.0</version>
</dependency>

配置 application.yml(可以不配)

# 分页配置
pagehelper:helper-dialect: mysql	#使用的数据库. mysql, oracle, sqlitereasonable: true #开启优化,在分页页码结果没有数据的时候,会显示有数据的页码数据,也就是当当前页<1时,返回第 1 页, 当当前页 > 最大页时, 返回最后一页的数据.support-methods-arguments: true #是否支持接口参数来传递分页参数,默认falsepageSizeZero: false #表示当 pageSize=0 时返回所有params: count=countSql

2.1.2、非SpringBoot

①引入依赖

<!-- pageHelper 分页插件 -->
<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.0.0</version>
</dependency>

②插件设置
XML 方式 : MyBatis.xml

<configuration>...<!-- 使用插件 --><plugins><!-- 使用分页插件 --><plugin interceptor="com.github.pagehelper.PageInterceptor"><!-- 分页参数合理化, 当页码数 < 0 时, 显示第一页.   当页码数 > 总页码数时, 显示最后一页  --><property name="reasonable" value="true"/></plugin></plugins>
</configuration>

JavaConfig 方式 : 添加配置类

@Configuration
public class PageHelperConfig {@Beanpublic PageHelper pageHelper(){PageHelper pageHelper = new PageHelper();Properties p = new Properties();//1.offsetAsPageNum:设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用.p.setProperty("offsetAsPageNum", "true");//2.rowBoundsWithCount:设置为true时,使用RowBounds分页会进行count查询.p.setProperty("rowBoundsWithCount", "true");//3.reasonable:启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页。p.setProperty("reasonable", "true");pageHelper.setProperties(p);return pageHelper;}
}

2.2、controller

PageResult pageResult = employeeService.pageQuery(employeePageQueryDTO);

image.png
这里设计返回的数据信息为Result,存储分页查询的结果,PageResult如下:
image.png

2.3、service

进入service层:

PageHelper.startPage(employeePageQueryDTO.getPage(),employeePageQueryDTO.getPageSize());
Page<Employee> page = employeeMapper.pageQuery(employeePageQueryDTO);

image.png
通过PageHelper.startPage()这种方式,插件会在底层生成SQL语句时自动添加LIMIT offset, pageSize子句,实现数据库级别的分页。
PageHelper.startPage()源码:
image.png

2.4、mapper

SQL语句如下:
image.png
看起来好像并没有分页查询的SQL语句,根据上文提到的,分页查询的SQL是由插件底层编写的。可以查看SpringBoot的控制台日志,如下:
image.png

当前员工id:1
员工分页查询,参数为:EmployeePageQueryDTO(name=null, page=1, pageSize=10)
Preparing: SELECT count(0) FROM employee
Parameters: Total: 1
Preparing: select * from employee order by create_time desc LIMIT ?
Parameters: 10(Integer)
Total: 5

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

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

相关文章

智能小程序事件系统——基础交互事件介绍

什么是交互事件 事件是视图层到逻辑层的通讯方式。事件可以将用户的行为反馈到逻辑层进行处理。事件可以绑定在组件上。当达到触发事件&#xff0c;就会执行逻辑层中对应的事件处理函数。事件对象可以携带额外信息&#xff0c;如 id、dataset 和 touches。 事件分类 事件分为…

Shell中正则表达式

1.正则表达式介绍 1、正则表达式---通常用于判断语句中&#xff0c;用来检查某一字符串是否满足某一格式 2、正则表达式是由普通字符与元字符组成 3、普通字符包括大小写字母、数字、标点符号及一些其他符号 4、元字符是指在正则表达式中具有特殊意义的专用字符&#xff0c…

25从零开始用Rust编写nginx,序列化之serde是如何工作的

wmproxy wmproxy已用Rust实现http/https代理, socks5代理, 反向代理, 静态文件服务器&#xff0c;四层TCP/UDP转发&#xff0c;内网穿透&#xff0c;后续将实现websocket代理等&#xff0c;会将实现过程分享出来&#xff0c;感兴趣的可以一起造个轮子 项目地址 国内: https:…

SQL字符串截取函数【简笔记】

MySQL提供了多种字符串函数来处理和截取字符串。下面是一些常用的字符串截取函数及其使用示范&#xff1a; SUBSTRING(str, pos, len) str 是要截取的字符串。pos 是开始截取的位置。len 是截取的长度。 示例: SELECT SUBSTRING(Hello, World!, 8, 5); -- 结果: "World…

实验一:FIRST集

前置知识 1.vector基本操作https://c.biancheng.net/view/6749.html2.set基本操作https://c.biancheng.net/view/7196.html 核心操作 //G文法结构体 struct G {int Vt_number;int Vn_number;int P_number;set<char> Vt;set<char> Vn;char S;vector<string>…

ConcurrentHashMap详解

ConcurrentHashMap详解 大家好&#xff0c;我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编&#xff0c;在今天的文章中&#xff0c;我们将深入探讨Java中的一个重要类——ConcurrentHashMap。这是一个在多线程环境下高效操作的线程安全的哈希表&#xff0c;让我们…

ERD Online:数据建模与元数据管理的未来

ERD Online&#xff1a;数据建模与元数据管理的未来&#x1f31f; 在数字化时代&#xff0c;数据是企业的核心资产。如何高效、安全地管理这些数据成为企业面临的一大挑战。今天&#xff0c;我要介绍的这个平台&#xff0c;可能是你正在寻找的解决方案——它就是 ERD Online&am…

企业级大数据安全架构(六)数据授权和审计管理

作者&#xff1a;楼高 本节详细介绍企业级大数据架构中的第六部分&#xff0c;数据授权和审计管理 1.Ranger简介 Apache Ranger是一款被设计成全面掌管Hadoop生态系统的数据安全管理框架&#xff0c;为Hadoop生态系统众多组件提供一个统一的数据授权和管理界面&#xff0c; 管…

怎么创建facebook广告

创建Facebook广告的文章应由本人根据自身实际情况书写&#xff0c;以下仅供参考&#xff0c;请您根据自身实际情况撰写。 创建Facebook广告的步骤&#xff1a; 确定目标受众和广告主题&#xff1a;首先需要明确你的目标受众是谁&#xff0c;他们有什么特点&#xff0c;以及你想…

蓝桥杯2024/1/28----十二届省赛题笔记

题目要求&#xff1a; 2、 竞赛板配置要求 2.1将 IAP15F2K61S2 单片机内部振荡器频率设定为 12MHz。 2.2键盘工作模式跳线 J5 配置为 KBD 键盘模式。 2.3扩展方式跳线 J13 配置为 IO 模式。 2.4 请注意 &#xff1a; 选手需严格按照以上要求配置竞赛板&#xff0c;编写和调…

APT32F1023X 发送RF433处理

1.硬件电路--CMT2110A 需要注意&#xff1a;发射端MCU写数据的频率要匹配&#xff0c;如果MCU发送中时间最小脉宽是1MS&#xff0c;那么它的发送需要设置为1kbps。 通过华普微USB调试工具PC软件RFPDK_V1.55查看设置是否正确。 2.RF433发送 用到的发送和接收代码来自“无线433发…

Matlab基础语法

基础语法 %% Matlab基本的小常识 % (1)在每一行的语句后面加上分号(一定要是英文的哦;中文的长这个样子&#xff1b;)表示不显示运行结果 a 3; a 5% (2)多行注释:选中要注释的若干语句,快捷键CtrlR % a 3; % a 5% (3)取消注释:选中要取消注释的语句,快捷键CtrlT % 我想要取…

【机器学习300问】20、什么是神经网络?和深度学习什么关系?

在学习深度学习的相关知识之前&#xff0c;我们首先得了解什么是神经网络&#xff0c;解开神经网络的神秘面纱后&#xff0c;什么是深度学习的问题也就迎刃而解。我依旧会采用我习惯的方式&#xff1a;先给出例子直观理解&#xff0c;在给出定义深入理解&#xff0c;最后在实际…

Ubuntu 系统如何修改时间

Ubuntu 系统如何修改时间 简介&#xff1a;在Ubuntu上&#xff0c;你可以使用以下三种方法来修改时间&#xff1a;date命令&#xff0c;timedatectl命令和hw 原文&#xff1a;Ubuntu 系统如何修改时间 (baidu.com)https://cloud.baidu.com/article/393621 三种方法修改Ubunt…

python中tuple元组的作用是什么

在Python中&#xff0c;tuple&#xff08;元组&#xff09;是一种不可变序列&#xff0c;可以存储不同类型的数据。 有以下几个作用&#xff1a; 用于存储多个相关的值&#xff1a;tuple是一个容器&#xff0c;可以用于存储多个值&#xff0c;这些值可以是不同类型的数据。例如…

前端自己整理的学习面试笔记

简介 以下是本人一年多整理的前端学习笔记&#xff0c;现汇总分享给大家&#xff0c;很多问题都是面试必问的 更多学习资源&#xff0c;可以点击我获取更多 1 js数据类型 原始类型&#xff1a; null undefined number string boolean Symbol BigInt 引用类型&#xff1a; 对…

ES6.8.6 Java客户端发起 增删改查 query (bool)、update、delete

文章目录 环境测试数据增单个新增批量新增 删通过delete by api删除通过delete by query api删除删除索引中指定字段&#xff08;script&#xff09; 改单个修改update by api通过_bulk批量修改批量修改update by query api使用script脚本修改 查完全匹配&#xff08;term&…

Android Studio 下载安装配置使用入门【2024年最新】

前言&#xff1a; Android Studio 是谷歌官方提供的主要集成开发环境&#xff08;IDE&#xff09;&#xff0c;专为 Android 平台应用开发而设计。它基于 JetBrains 的 IntelliJ IDEA 软件&#xff0c;并在此基础上增加了大量针对 Android 开发的定制功能。Android Studio 通过…

浏览器推荐:从技术与体验角度的深入探讨

文章目录 浏览器推荐&#xff1a;从技术与体验角度的深入探讨主流浏览器概览1. Chrome2. Firefox3. Safari4. Edge5. 其他浏览器 浏览器技术差异渲染引擎JavaScript引擎网络与安全性 浏览器速度与性能基准测试实际使用 开发者友好性开发者工具扩展与插件开发者社区与资源 选择建…

基于Vue uniapp和java SpringBoot的汽车充电桩微信小程序

摘要&#xff1a; 随着新能源汽车市场的迅猛发展&#xff0c;汽车充电桩的需求日益增长。为了满足市场需求&#xff0c;本课题开发了一款基于Java SpringBoot后端框架和Vue uniapp前端框架的汽车充电桩微信小程序。该小程序旨在为用户提供一个简洁高效的充电服务平台&#xff0…