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

使用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后端技术栈!!!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • JavaScript实战 - 一个能够做圆周运动的模型
  • “微软蓝屏”全球宕机,敲响基础软件自主可控警钟
  • HTML:lang属性作用
  • 谷粒商城实战笔记-47-商品服务-API-三级分类-网关统一配置跨域
  • Transformer-Bert---散装知识点---mlm,nsp,较之经典tran的区别和实际应用方式
  • c++中的音乐
  • Linux火焰传感器驱动程序
  • .NET程序集编辑器/调试器 dnSpy 使用介绍
  • 安卓开机启动性能优化之-bootchart相关工具使用及查看
  • 【Django】在vscode中新建Django应用并新增路由
  • 模拟电子技术-实验四 二极管电路仿真
  • IDEA缓存和索引
  • css中如何清除浮动
  • js点击或者双击页面使其全屏,并且内容自适应
  • C++ : 序列容器之Vector
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • Apache Zeppelin在Apache Trafodion上的可视化
  • django开发-定时任务的使用
  • Mysql优化
  • oldjun 检测网站的经验
  • ReactNative开发常用的三方模块
  • vue:响应原理
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 电商搜索引擎的架构设计和性能优化
  • 观察者模式实现非直接耦合
  • 探索 JS 中的模块化
  • 原生JS动态加载JS、CSS文件及代码脚本
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • ​什么是bug?bug的源头在哪里?
  • #Linux(权限管理)
  • #进阶:轻量级ORM框架Dapper的使用教程与原理详解
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • (1)(1.13) SiK无线电高级配置(五)
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (九)One-Wire总线-DS18B20
  • (六)软件测试分工
  • (一)WLAN定义和基本架构转
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .Net Core和.Net Standard直观理解
  • .NET Micro Framework初体验
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • .NET/C# 获取一个正在运行的进程的命令行参数
  • .net6 core Worker Service项目,使用Exchange Web Services (EWS) 分页获取电子邮件收件箱列表,邮件信息字段
  • .NET设计模式(8):适配器模式(Adapter Pattern)
  • .net实现客户区延伸至至非客户区
  • .NET值类型变量“活”在哪?
  • .pyc文件还原.py文件_Python什么情况下会生成pyc文件?
  • ??myeclipse+tomcat
  • @cacheable 是否缓存成功_Spring Cache缓存注解
  • [2023年]-hadoop面试真题(一)