Java 分页查询实现

天行健,君子以自强不息;地势坤,君子以厚德载物。


每个人都有惰性,但不断学习是好好生活的根本,共勉!


文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。

文章目录

  • 一、前言
    • 1. 环境版本参数
    • 2. 文章参考
  • 二、依赖
  • 三、配置
  • 四、代码实现
    • 1. 实现代码
    • 2. 完整代码
  • 五、分页结果
    • 1. 默认查询
    • 2. 条件查询
  • 六、分页参数拓展


一、前言

1. 环境版本参数

  • 开发工具:IDEA 2023.2.1
  • Java框架:SpringBoot 2.7.3
  • 接口调用工具:postman

2. 文章参考

  • 搭建springboot项目:
    springboot搭建
  • 配置mysql数据库连接:
    springboot集成MySQL
  • 配置mybaits或者mybatis-plus框架:
    springboot集成mybatis
  • 编写查询数据代码:
    springboot集成增删改查接口

二、依赖

pom.xml中添加分页所需依赖

        <!-- 分页插件page helper --><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.6</version></dependency>

三、配置

在application.yml中配置pagehelper相关参数

#使用mybatis/mybatis-plus和pagehelper插件实现分页查询
pagehelper:# 设置方言,指定为mysqlhelper-dialect: mysql# 是否启用合理化,默认为false# false表示禁用合理化:此时,若pageNum<1会查询第一页,若pageNum>pages(最大页数)会查询最后一页# ture表示启用合理化:此时,若pageNum<1或pageNum>pages会返回空数据reasonable: true# 是否支持接口参数来传递分页参数,默认falsesupport-methods-arguments: true# 为了支持startPage(Object params)方法,增加了改参数来配置参数映射,用于从对象中根据属性名获取params: count=countSql# 默认为false,当改参数设置为true时,若pageSize=0或RowBounds.limit=0就会查询出全部结果(相当于没有执行分页查询,但是返回结果仍是Page类型)page-size-zero: true

四、代码实现

1. 实现代码

    @GetMapping(value = "/pageQueryAccount")public PageInfo<TbUserAccount> pageQueryAccount(@RequestParam(value = "pageNumber", defaultValue = "1") int pageNumber,@RequestParam(value = "pageSize", defaultValue = "10") int pageSize){//设置分页,该语句必须放在所需分页的查询语句前,如有两条查询语句,它会根据就近原则进行查询的结果分页,除了最近的一条查询语句,其他不生效PageHelper.startPage(pageNumber, pageSize);TbUserAccountImpl tbUserAccountImpl = new TbUserAccountImpl();List<TbUserAccount> tbUserAccounts = tbUserAccountMapper.selectByExample(tbUserAccountImpl);//默认倒序,第一页展示最新的数据,根据id,倒序排列List<TbUserAccount> collect = tbUserAccounts.stream().sorted(Comparator.comparing(TbUserAccount::getId).reversed()).collect(Collectors.toList());return new PageInfo(collect);}

2. 完整代码

UserAccountController.java

package com.libai.account.controller;import com.alibaba.fastjson2.JSONObject;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.libai.user.entity.TbUserAccount;
import com.libai.user.entity.TbUserAccountImpl;
import com.libai.user.mapper.TbUserAccountMapper;
import com.libai.utils.string_utils.RandomStringUtils;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;/*** @ClassDescription: 用户账号密码相关接口* @JdkVersion: 1.8* @Author: 李白* @Created: 2024/4/16 17:04*/
@Api(value = "用户账号密码操作类", tags = {"用户账号密码操作接口"})
@RestController
@RequestMapping(value = "/account")
public class UserAccountController {@AutowiredTbUserAccountMapper tbUserAccountMapper;//分页查询处理/*** 分页查询账号信息* @param pageNumber 当前页* @param pageSize 每页条数* @return 返回分页处理后的结果*/@ApiOperation(value = "分页查询用户账号信息", notes = "用于查询用户账号信息并分页处理的接口")@ApiImplicitParams({@ApiImplicitParam(name = "pageNumber", value = "当前页的页码", required = false),@ApiImplicitParam(name = "pageSize", value = "每页显示的条数", required = false)})@GetMapping(value = "/pageQueryAccount")public PageInfo<TbUserAccount> pageQueryAccount(@RequestParam(value = "pageNumber", defaultValue = "1") int pageNumber,@RequestParam(value = "pageSize", defaultValue = "10") int pageSize){//设置分页,该语句必须放在所需分页的查询语句前,如有两条查询语句,它会根据就近原则进行查询的结果分页,除了最近的一条查询语句,其他不生效PageHelper.startPage(pageNumber, pageSize);TbUserAccountImpl tbUserAccountImpl = new TbUserAccountImpl();List<TbUserAccount> tbUserAccounts = tbUserAccountMapper.selectByExample(tbUserAccountImpl);//默认倒序,第一页展示最新的数据,根据id,倒序排列List<TbUserAccount> collect = tbUserAccounts.stream().sorted(Comparator.comparing(TbUserAccount::getId).reversed()).collect(Collectors.toList());return new PageInfo(collect);}}

五、分页结果

启动服务,使用postman调用接口

1. 默认查询

先不加参数,使用默认的参数访问(代码中默认的参数为pageNumber=1,pageSize=10)
在这里插入图片描述
查询结果如下,这里第一页的数据id之所以会倒序是因为代码里做了倒序排列,如不需要可将倒序代码注掉

{"total": 10,"list": [{"id": 10,"username": "KcN1gQ","password": "QJRgIK"},{"id": 9,"username": "iciFiv","password": "pFD8Qm"},{"id": 8,"username": "3nq5zq","password": "Fg01W6"},{"id": 7,"username": "Cpza2X","password": "eTOZJF"},{"id": 6,"username": "z6VKoy","password": "2uw14V"},{"id": 5,"username": "W3NPTu","password": "PBhoZ4"},{"id": 4,"username": "B7zaoA","password": "JA8OVu"},{"id": 3,"username": "3irogP","password": "TRXlzc"},{"id": 2,"username": "gbGfJy","password": "FOdExO"},{"id": 1,"username": "O4In2i","password": "Q7CKTa"}],"pageNum": 1,"pageSize": 10,"size": 10,"startRow": 0,"endRow": 9,"pages": 1,"prePage": 0,"nextPage": 0,"isFirstPage": true,"isLastPage": true,"hasPreviousPage": false,"hasNextPage": false,"navigatePages": 8,"navigatepageNums": [1],"navigateFirstPage": 1,"navigateLastPage": 1
}

2. 条件查询

现在加上参数,将pageSize定为10,pageNumber值定为1000,该参数肯定大于总页数(我的数据60条,每页10条共6页),所以会展示最后一页数据
在这里插入图片描述

返回分页处理后的数据如下,因为这里将查询的结果根据id倒序排列,所以看到最后的十条数据,且第一条是最后一条id为60的数据

{"total": 10,"list": [{"id": 60,"username": "kzii","password": "7Lvr1M"},{"id": 59,"username": "wyxy","password": "JyvbAg"},{"id": 58,"username": "iefh","password": "BmGLLS"},{"id": 57,"username": "dacz","password": "mrY6XC"},{"id": 56,"username": "otpx","password": "mDJIYp"},{"id": 55,"username": "shcz","password": "044r2H"},{"id": 54,"username": "wlqv","password": "HSVfFy"},{"id": 53,"username": "cbev","password": "cfMPKe"},{"id": 52,"username": "cvwk","password": "d4zwyX"},{"id": 51,"username": "nadd","password": "LHRNdw"}],"pageNum": 1,"pageSize": 10,"size": 10,"startRow": 0,"endRow": 9,"pages": 1,"prePage": 0,"nextPage": 0,"isFirstPage": true,"isLastPage": true,"hasPreviousPage": false,"hasNextPage": false,"navigatePages": 8,"navigatepageNums": [1],"navigateFirstPage": 1,"navigateLastPage": 1
}

六、分页参数拓展

在上面的分页查询结果中有很多参数,参数及其含义如下,仅供参考,因为有些参数好像并不是准确的
"total": 10表示当前页查询到的数据记录条数
"list": []表示结果集,查询的结果数据集合
"pageNum": 1表示当前页的页码
"pageSize": 10表示每页展示的数据条数
"size": 10表示当前页的数据条数
"startRow": 0表示当前页第一个元素在数据库中的行号
"endRow": 9表示当前页最后一个元素在数据库中的行号
"pages": 1表示总页数
"prePage": 0表示前一页
"nextPage": 0表示后一页
"isFirstPage": true表示是否为第一页
"isLastPage": true表示是否为最后一页
"hasPreviousPage": false表示是否有前一页
"hasNextPage": false表示是否有后一页
"navigatePages": 8表示导航页码数
"navigatepageNums": [ 1 ]表示所有导航页号
"navigateFirstPage": 1表示导航条上的第一页
"navigateLastPage": 1表示导航条上的最后一页


感谢阅读,祝君暴富!

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

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

相关文章

结合 react-webcam、three.js 与 electron 实现桌面人脸动捕应用

系列文章目录 React 使用 three.js 加载 gltf 3D模型 | three.js 入门React three.js 3D模型骨骼绑定React three.js 3D模型面部表情控制React three.js 实现人脸动捕与3D模型表情同步结合 react-webcam、three.js 与 electron 实现桌面人脸动捕应用 示例项目(github)&…

【Canvas与艺术】绘制黑白山间野营Camping徽章

【说明】 中间的山月图是借用的网上的成图&#xff0c;不是用Canvas绘制的。 【成果图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head>…

如何应对Andriod面试官 -> 如何 Hook Activity 的启动流程?

前言 本章继续讲解 AMS 相关的知识点&#xff0c;如何 Hook Activity 的启动流程&#xff1b; attach 我们这样直接从 attach 入口讲起 private void attach(boolean system, long startSeq) {// 省略部分代码// AMSfinal IActivityManager mgr ActivityManager.getService(…

gcc原理和使用

gcc gcc是什么 GCC&#xff0c;全称 GNU Compiler Collection&#xff08;GNU 编译器套件&#xff09;&#xff0c;是一套功能强大的编程语言编译器&#xff0c;由自由软件基金会&#xff08;Free Software Foundation, FSF&#xff09;作为GNU项目的一部分开发和维护。它最初…

我们一起看看《看漫画学C++》中如何介绍的字符串的用法

C中的字符串使用的是 std::string 类型&#xff0c;它是C标准库中提供的字符串类&#xff0c;提供了丰富的字符串操作方法。下面是关于C字符串的一些常用用法&#xff1a; 字符串拼接 字符串查找 字符串追加 购书地址&#xff1a;https://item.jd.com/14418856.html

网工交换基础——MUX VLAN

前言&#xff1a; MUX VLAN&#xff08;Multiplex VLAN&#xff0c;多复用VLAN&#xff09;提供了一种通过VLAN进行网络资源控制的机制。例如&#xff0c;在企业网络中&#xff0c;企业员工和企业客户可以访问企业的服务器。对于企业来说&#xff0c;希望企业内部员工之…

c++的学习之路:24、 二叉搜索树概念

摘要 本章主要是讲一下二叉搜索树的实现 目录 摘要 一、二叉搜索树概念 二、 二叉搜索树操作 1、二叉搜索树的查找 2、二叉搜索树的插入 3、二叉搜索树的删除 三、二叉搜索树的实现 1、插入 2、中序遍历 3、删除 4、查找 四、二叉搜索树的递归实现 1、插入 2、删…

2024年机电工程与航天航空技术国际研讨会(ISMEEAT2024)

2024年机电工程与航天航空技术国际研讨会&#xff08;ISMEEAT2024) 会议简介 会议委员会很高兴邀请您参加在上海举行的2024国际机电工程与航空航天技术研讨会&#xff08;ISMEEAT2024&#xff09;。ISMEEAT2024为研究人员提供了一个创新的环境&#xff0c;展示他们的新研究和…

Pygame经典游戏:坦克大战TankWar+五子棋人机对弈(安排!!)

Python108款&#xff0c;小游戏集合&#xff0c;总有一个是你想要的 中国象棋 像素鸟 五子棋 24点小游戏 贪吃蛇 扫雷 俄罗斯方块 魂斗罗 消消乐 坦克大战 外星人入侵 汤姆猫 斗地主 乒乓球 推箱子 植物大战僵尸 围棋 超级玛丽 飞机大战 迷宫 滑雪 吃豆人…等等&#xff08;…

postman汉化

一、postman历史版本下载&#xff1a;Postman 10.24.16 Download for Windows / Old Versions / FileHorse.comhttps://www.filehorse.com/download-postman/old-versions/ 二、汉化包下载&#xff1a; Releases hlmd/Postman-cn GitHubPostman汉化中文版. Contribute to h…

Python文件操作大全

1 文件操作 1.1 文件打开与关闭 1.1.1 打开文件 在Python中&#xff0c;你可以使用 open() 函数来打开文件。以下是一个简单的例子&#xff1a; # 打开文件&#xff08;默认为只读模式&#xff09; file_path example.txt with open(file_path, r) as file:# 执行文件操作…

CTFHUB-技能树-Web前置技能-文件上传(无验证,JS前端验证,前端验证)

CTFHUB-技能树-Web前置技能-文件上传&#xff08;无验证&#xff0c;JS前端验证&#xff0c;前端验证—.htaccess&#xff09; 文章目录 CTFHUB-技能树-Web前置技能-文件上传&#xff08;无验证&#xff0c;JS前端验证&#xff0c;前端验证—.htaccess&#xff09;文件上传无验…