使用PageHelper插件来分页查询

目录

一.什么是PageHelper?

二.PageHelper的实战操作:

1.导入PageHelper的相关依赖:

2.配置代码展示:

3.分页查询代码解析: 

另外,肯定读者会好奇为什么能够自动动态拼接?


一.什么是PageHelper?

PageHelper,mybatis的一个插件,用于 mybatis 分页查询操作,以此来减轻我们对于分页查询的代码冗杂。

二.PageHelper的实战操作:

1.导入PageHelper的相关依赖:

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

2.配置代码展示:

首先我们列举 Controller 层的代码:

@RestController
@RequestMapping("/admin/employee")
@Slf4j
@Api(tags = "员工相关接口")
public class EmployeeController {@Autowiredprivate EmployeeService employeeService;/*** 员工分页查询* @param employeePageQueryDTO* @return*/@GetMapping("/page")@ApiOperation("员工分页查询")public Result<PageResult> page(EmployeePageQueryDTO employeePageQueryDTO){log.info("员工分页查询:{}",employeePageQueryDTO);PageResult pageResult = employeeService.pageQuery(employeePageQueryDTO);return Result.success(pageResult);}
}

其中 PageResult 类封装两种属性来返回给前端:(总记录数,当前页数据集合)

@Data
@AllArgsConstructor
@NoArgsConstructor
public class PageResult implements Serializable {private long total; //总记录数private List records; //当前页数据集合}

 而我们的 Result 类封装一种格式来返回给前端:

@Data
public class Result<T> implements Serializable {private Integer code; //编码:1成功,0和其它数字为失败private String msg; //错误信息private T data; //数据public static <T> Result<T> success() {Result<T> result = new Result<T>();result.code = 1;return result;}public static <T> Result<T> success(T object) {Result<T> result = new Result<T>();result.data = object;result.code = 1;return result;}public static <T> Result<T> error(String msg) {Result result = new Result();result.msg = msg;result.code = 0;return result;}
}

3.分页查询代码解析: 

随后,我们的分页查询在Service层逐渐体现:

分页查询分为两步:分页 , 查询

①PageHelper.startPage ( int 页码pageNum , int 每页记录数PageSize );

用来实现字符串的拼接 => select * from employee limit _,_ =>由插件动态计算生成 limit 后面的查询范围数,然后动态拼接成xml文件的代码。(分页)

eg:select * from employee limit 0,10 => 从第一条查,共查十条数据

②查询Page<查询类> page = ___Mapper.pageQuery(查询的DTO类);

这行代码是来写我们查询代码的条件。(查询)

③我们返回的page实际上在Page类内封装好能够拿到总记录数以及当前页数据集合,所以我们直接创建一个PageResult并有参构造返回就可以了。

@Service
public class EmployeeServiceImpl implements EmployeeService {@Autowiredprivate EmployeeMapper employeeMapper;//分页查询 PageHelper@Overridepublic PageResult pageQuery(EmployeePageQueryDTO employeePageQueryDTO) {PageHelper.startPage(employeePageQueryDTO.getPage() ,employeePageQueryDTO.getPageSize());Page<Employee> page = employeeMapper.pageQuery(employeePageQueryDTO);return new PageResult(page.getTotal() , page.getResult());}
}

 随后我们就在mapper.java文件来编写代码:

@Mapper
public interface EmployeeMapper {/*** 员工分页查询* @param employeePageQueryDTO* @return*/Page<Employee> pageQuery(EmployeePageQueryDTO employeePageQueryDTO);
}

而因为需要动态拼接,所以我们要使用 mybatis 编写 xml 文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.sky.mapper.EmployeeMapper"><select id="pageQuery" resultType="com.sky.entity.Employee">select * from employee<where><if test = "name != null and name != ''">and name like concat('%' , #{name} , '%')  #concat来模糊查询名字</if></where>order by create_time desc  #根据创建时间降序排序</select>
</mapper>

 因为我们使用PageHelper.startPage()方法,所以不需要拼接limit _,_ 。

而为了让我们的项目能够扫描到xml配置文件,我们就需要再application.yml文件去配置:

mybatis:#mapper配置文件mapper-locations: classpath:mapper/*.xml

另外,肯定读者会好奇为什么能够自动动态拼接?

实际上,在PageHelper插件的底层封装一个 setLocalPage() 方法,能够将我们的 page 类对象存到 ThreadLocal 存储空间,随后在进行分页查询就会自动在存储空间将页码以及每页记录数给取出并动态把 limit 关键字拼接进去,并将页码以及每页记录数来动态的计算出来,最后形成一个能进行分页查询的 xml 文件。


好了,今天的分享就到这里了,感谢收看,后序会继续分享Javaweb后端技术栈!!!

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

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

相关文章

关于Static 误用问题,总是记不住

一、常规的 静态局部变量&#xff0c;静态成员变量和成员函数没啥疑问 二、全局变量问题。。。 * 如果在 C 文件中使用 static 修饰全局变量&#xff0c; * 它将限制变量的作用域在当前文件内。 * 这意味着其他文件无法直接访问或修改这个变量的值。 …

Arduino IDE界面和设置(基础知识)

Arduino IDE界面和设置&#xff08;基础知识&#xff09; 1-2 Arduino IDE界面和设置如何来正确选择Arduino开发板型号如何正确选择Arduino这个端口如何来保存一个Arduino程序Arduino ide 的界面功能按钮验证编译上传新建打开保存工作状态 1-2 Arduino IDE界面和设置 大家好这…

day00-系统重要文件

01.知识点回顾 1.resolv.conf dns的配置文件 [rootlinux ~]# vim /etc/resolv.conf [rootlinux ~]# nslookup www.baidu.com Server: 8.8.8.8 Address: 8.8.8.8#53Non-authoritative answer: www.baidu.com canonical name www.a.shifen.com. Name: www.a.shifen.com Addre…

MongoDB适合哪些人使用

MongoDB 是一款高性能、开源、无模式的文档型数据库&#xff0c;它使用 BSON&#xff08;Binary JSON&#xff09;作为其数据格式&#xff0c;这使得 MongoDB 非常适合于存储和查询复杂的数据结构。MongoDB 的灵活性、可扩展性和高性能特性吸引了多种类型的用户。以下是 MongoD…

如何穿透模糊,还原图片真实面貌

目录 图像清晰化的魔法棒&#xff1a;AI如何穿透模糊&#xff0c;还原图片真实面貌 前言 论文背景 论文思路 模型介绍 复现过程 演示视频 使用方式 本文所涉及所有资源均在传知代码平台可获取。 图像清晰化的魔法棒&#xff1a;AI如何穿透模糊&#xff0c;还原图片真实面貌 在我…

全网最最实用--模型高效推理:量化基础

文章目录 一、量化基础--计算机中数的表示1. 原码&#xff08;Sign-Magnitude&#xff09;2. 反码&#xff08;Ones Complement&#xff09;3. 补码&#xff08;Twos Complement&#xff09;4. 浮点数&#xff08;Floating Point&#xff09;a.常用的浮点数标准--IEEE 754(FP32…

状态机 XState 使用

状态机 一般指的是有限状态机&#xff08;Finite State Machine&#xff0c;FSM&#xff09;&#xff0c;又可以称为有限状态自动机&#xff08;Finite State Automation&#xff0c;FSA&#xff09;&#xff0c;简称状态机&#xff0c;它是一个数学模型&#xff0c;表示有限个…

【计算机网络】数据链路层实验

一&#xff1a;实验目的 1&#xff1a;学习WireShark软件的抓包操作&#xff0c;分析捕获的以太网的MAC帧结构。 2&#xff1a;学习网络中交换机互相连接、交换机连接计算机的拓扑结构&#xff0c;理解虚拟局域网&#xff08;WLAN&#xff09;的通信机制。 3&#xff1a;学习…

cas 和 synchronized 优化过程

cas 什么是CAS CAS:全称Compareandswap&#xff0c;字⾯意思:”⽐较并交换“&#xff0c;⼀个CAS涉及到以下操作&#xff1a; 我们假设内存中的原数据V&#xff0c;旧的预期值A&#xff0c;需要修改的新值B。 1. ⽐较A与V是否相等。&#xff08;⽐较&#xff09; 2. 如果⽐较…

半导体行业黑话-02

31. #Silicon Chef# - 硅厨师,指负责设计和制造芯片的工程师。 32. #Silicon Chefs Kitchen# - 硅厨师的厨房,指半导体设计和制造的实验室或工作区。 33. #Silicon Ghetto# - 硅贫民区,有时用来形容那些技术落后或条件较差的制造厂。 34. #Silicon Jungle# - 硅丛林,形容半…

ubuntu22.04单个网口两个IP

其中 4网段IP可用来上网&#xff0c;3 网段用来内网 界面显示: 配置文件&#xff1a; 01-network-manager-all.yaml 放在 /etc/netplan/ # Let NetworkManager manage all devices on this systemnetwork:version: 2renderer: networkdethernets:eth0:dhcp4: falsedhcp6: …

防火墙与入侵检测系统(IDS/IPS)在现代网络安全中的关键角色

在数字化日益加速的今天&#xff0c;网络安全变得尤为重要。随着网络攻击的复杂性和频率不断增加&#xff0c;保护关键信息资产已成为各大小组织的首要任务。防火墙&#xff08;Firewall&#xff09;和入侵检测系统&#xff08;Intrusion Detection System&#xff0c;IDS&…

开放式耳机哪个牌子好?五大超值机型整理,速速收藏!!

大家都知道现在的开放式耳机是越来越火了&#xff0c;后台也有非常多的小伙伴来私信&#xff0c;作为一个耳机测评师&#xff0c;当然是为了你们服务啦&#xff0c;所以这一期文章&#xff0c;就是为了个大家答疑解惑&#xff0c;告诉大家如何才能选购出一款比较好用的开放式耳…

【Python】字母 Rangoli 图案

一、题目 You are given an integer N. Your task is to print an alphabet rangoli of size N. (Rangoli is a form of Indian folk art based on creation of patterns.) Different sizes of alphabet rangoli are shown below: # size 3 ----c---- --c-b-c-- c-b-a-b-c --…

3106. 满足距离约束且字典序最小的字符串 Medium

给你一个字符串 s 和一个整数 k 。 定义函数 distance(s1, s2) &#xff0c;用于衡量两个长度为 n 的字符串 s1 和 s2 之间的距离&#xff0c;即&#xff1a; 字符 a 到 z 按 循环 顺序排列&#xff0c;对于区间 [0, n - 1] 中的 i &#xff0c;计算所有「 s1[i] 和 s2[i] 之间…

万字长文详解Java反射技术 | JavaSE | Java进阶知识 | 源码

&#x1f64b;大家好&#xff01;我是毛毛张! &#x1f308;个人首页&#xff1a; 神马都会亿点点的毛毛张 &#x1f4cc;今天分享的是JavaSE中的进阶知识&#x1f6d1;&#xff1a;反射技术。内容有点长&#xff0c;非常全面&#xff0c;记得点赞&#x1f44d;、收藏✅加关…

最长回文字符串

# 状态转移方程 P(i,j)P(i1,j−1)∧(SiSj)class Solution:def longestPalindrome(self, s: str) -> str:n len(s)if n < 2:return smax_len 1begin 0# dp[i][j] 表示s[i..j]是否是回文串dp [[False] * n for _ in range(n)]for i in range(n):dp[i][i] True# 开始递…

【网络世界】HTTP协议

目录 &#x1f308;前言&#x1f308; &#x1f4c1; 概念 &#x1f4c1; URL &#x1f4c2; urlencode 和 urldecode &#x1f4c1; 协议格式 &#x1f4c1; 方法 &#x1f4c2; GET/get &#x1f4c2; POST/post &#x1f4c1; 常见的报头 &#x1f4c1; 状态码 &…

模型大小的指标和模型量化的指标和手段

一、模型大小的指标 1.计算量 计算次数&#xff0c;反映了模型对硬件计算单元的需求。计算量的单位是 OPs(Operations) 。最常用的数据格式 为 float32&#xff0c;因此float32类型下的计算量单位被写作 FLOPs (Floating Point Operations)&#xff0c;即浮点计算次数。模型的…

3D Web轻量化引擎HOOPS Communicator针对复杂大模型Web端可视化的解决方案

随着工程设计、制造和建筑领域中三维模型的日益复杂化&#xff0c;如何在Web端高效处理和展示这些大规模数据成为一大挑战。HOOPS Communicator作为一款强大的3D可视化工具&#xff0c;提供了一套针对复杂大模型的轻量化解决方案&#xff0c;涵盖了模型轻量化及格式转换、超大模…