使用PageHelper插件获取数据总条数不对的问题的解决方案

简介: 使用PageHelper插件获取数据总条数不对的问题的解决方案

PageHelper 这个插件用了很多次了,今天使用的时候才发现中间有一个大坑,就是使用这个插件中间只能有一次查询的操作语句,不能再添加其它语句(两行代码之间不能再有其他代码)!

例如,我们一般都是这样进行查询:

//创建一个PageResult对象出来
PageResult<AdvertInfo> pageResult = new PageResult<>();
//开启分页,pageNum代表当前页数,pageSize代表每页总数
PageHelper.startPage(pageNum, pageSize);
//查询数据库的语句,pageHelper在这里做一次拦截器操作
List<AdvertInfo> advertList = advertMapper.getAdvertList(advertInfoParam);
//使用PageInfo包装结果
PageInfo<AdvertInfo> pageInfo = new PageInfo<>(advertList);

上述操作是这样的,但是如果我们需要将查询的List<AdvertInfo>转换成前端展示的 ViewObject 对象,那么我们想当然会在中间做一次操作:

PageHelper.startPage(pageNum, pageSize);
List<AdvertInfo> advertList = advertMapper.getAdvertList(advertInfoParam);
//将AdvertInfo某些字段要隐藏,不在前台展示,所以需要转换成前端需要的bean对象
List<AdvertInfoVO> AdvertInfoList = new ArrayList<>();
for (AdvertInfo info : pageInfo.getList()) {
    res.add(convertAdvertInfoToVO(info));
}
//然后再包装一下前端对象
PageInfo<AdvertInfoVO> pageInfo = new PageInfo<>(AdvertInfoList);

这样获取的pageInfo.getTotal()一直是当前的 pageSize总数,而不是查询的总条数。所以,我们最好不要在 pageHelper 两个语句中间插入其它语句,而是在后面做一些操作:

//分页查询
PageHelper.startPage(pageNum, pageSize);
List<AdvertInfo> advertList = advertMapper.getAdvertList(advertInfoParam);
PageInfo<AdvertInfo> pageInfo = new PageInfo<>(advertList);
//转换成前端VO
List<AdvertInfoVO> advertInfoList = new ArrayList<>();
for (AdvertInfoinfo : pageInfo.getList()) {
    advertInfoList.add(convertAdvertInfoToVO(info));
}
//那么这样就可以正确返回了!
return new LayuiTableResult(0, "查询成功", pageInfo.getTotal(), advertInfoList);;

 


相关文章
|
Java 容器
如何在SpringBoot项目中使用过滤器和拦截器
过滤器和拦截器是日常开发中常用技术,用于对特定请求进行增强处理,如插入自定义代码以实现特定功能。过滤器在请求到达 `servlet` 前执行,而拦截器在请求到达 `servlet` 后执行。`SpringBoot` 中的拦截器依赖于 `SpringBoot` 容器,过滤器则由 `servlet` 提供。通过实现 `Filter` 接口并重写 `doFilter()` 方法可实现过滤器;通过实现 `HandlerInterceptor` 接口并重写相应方法可实现拦截器。两者的主要区别在于执行时机的不同,需根据具体场景选择使用。
609 4
如何在SpringBoot项目中使用过滤器和拦截器
|
SQL XML 安全
mybatis批量更新数据三种方法效率对比【Mysql】
mybatis批量更新数据三种方法效率对比【Mysql】
4668 0
mybatis批量更新数据三种方法效率对比【Mysql】
|
XML 存储 JSON
JSON、JSONObject 与 JSONArray 详细介绍及其应用方式
JSON、JSONObject 与 JSONArray 详细介绍及其应用方式
4492 3
JSON、JSONObject 与 JSONArray 详细介绍及其应用方式
|
XML Java 数据库
探索 Spring Boot 中的 @Configuration 注解:核心概念与应用
【4月更文挑战第20天】在 Spring Boot 项目中,@Configuration 注解扮演了一个关键角色,它标识一个类作为配置源,这些配置用于定义和管理 Spring 应用程序中的 Bean
2412 7
|
NoSQL 关系型数据库 MySQL
排行榜系统设计:高并发场景下的最佳实践
本文由技术分享者小米带来,详细介绍了如何设计一个高效、稳定且易扩展的排行榜系统。内容涵盖项目背景、技术选型、数据结构设计、基本操作实现、分页显示、持久化与数据恢复,以及高并发下的性能优化策略。通过Redis与MySQL的结合,确保了排行榜的实时性和可靠性。适合对排行榜设计感兴趣的技术人员参考学习。
1597 7
排行榜系统设计:高并发场景下的最佳实践
|
前端开发
使用PageHelper插件获取数据总条数不对的问题的解决方案
使用PageHelper插件获取数据总条数不对的问题的解决方案
644 0
|
存储 SQL NoSQL
mybatis-plus小技能: 分表策略(按年分表和按月分表)
业务场景: 日志、交易流水表或者其他数据量大的表,通过日期进行了水平分表,需要通过日期参数,动态的查询数据。 实现思路:利用MybatisPlus的动态表名插件DynamicTableNameInnerInterceptor ,实现Sql执行时,动态的修改表名。
8529 3
mybatis-plus小技能: 分表策略(按年分表和按月分表)
|
Java 关系型数据库 MySQL
【mybatis-plus】自定义多数据源,动态切换数据源事务失效问题
【mybatis-plus】自定义多数据源,动态切换数据源事务失效问题
【mybatis-plus】自定义多数据源,动态切换数据源事务失效问题
|
负载均衡 应用服务中间件 网络安全
Nginx七层(应用层)反向代理:HTTP反向代理proxy_pass篇(一)
Nginx七层(应用层)反向代理:HTTP反向代理proxy_pass篇(一)
2611 0