记录一个关于PageHelper的坑

MyBatis分页插件PageHelper踩坑记录 前言 公司用PageHelper作为Mybatis的分页插件,平时大多数都是用于查询数据库,然后进行分页。最近我想把第三方接口返回的数据进行分页展示,于是也用了PageHelper。 PageHelper:https://pagehelper.github.io/ 问题 有的查询语句后面会出现多个Limit 10,eg: select * from tableA limit 10 limi... 阅读详情

记录一个关于PageHelper的坑

下面是部分代码,我在方法中并没有使用PageHelper.startPage()方法开启分页,
但还是进行了分页查询,于是开始找原因,一开始怀疑是其他方法调用了PageHelper.startPage(),
并且PageHelper.startPage()方法的作用域是类,但是PageHelper.startPage()方法的作用域是跟
线程绑定的,并且只对调用startPage()方法之后紧随其后的第一个SQL查询有效,那为什么我并没有
使用PageHelper.startPage()方法开启分页还是进行了分页呢,找不到原因于是开始尝试在此方法内禁掉分页查询
@RequestMapping(value = "/query_ot_list_count")
    public ResultResponse<PageResp<OtCountVo>> queryOtListCount(@RequestBody OtCountDto otCountDto) {
        LOG.info("查加班统计列表:{}", JSON.toJSONString(otCountDto));
        ResultResponse<PageResp<OtCountVo>> result=new ResultResponse<PageResp<OtCountVo>>();
        /**判断 学校id**/
        if (CoreUtils.isNull(otCountDto)||CoreUtils.isNull(otCountDto.getSchoolId())) {
            result.setRescode(RespConsts.PARAM_ERROR);
            result.setResmsg("学校id不可以为空");
            return result;
        }
        PageResp<OtCountVo> pageResp = otBusiness.queryOtListCount(otCountDto);
        try {
            /**封装参数**/
            result.setData(pageResp);
            result.setRescode(RespConsts.SUCCESS_RET);
            result.setResmsg("SUCCESS");
        }catch (Exception e){
            LOG.error(e.getMessage(), e);
            result.setResmsg("查询加班统计列表失败");
            result.setRescode(RespConsts.SERVICE_ERROR);
        }
        return result;
    }
public PageResp<OtCountVo> queryOtListCount(OtCountDto otCountDto) {
//        清除之前的分页设置
//        PageHelper.clearPage();
        List<OtCountVo> otCountVos = otInfoDao.selectOtsByOtCountDtos(otCountDto);
}
public class OtCountDto implements Serializable {

    private Integer applyUserId;
    private Integer applyDeptId;
    private String applyUserName;
    private String applyDeptName;
    private Integer schoolId;
    private Float otTimeCount;
    private Date startTime;
    private Date endTime;
    private List<Integer> applyUserIds;
    private Integer sort = 1;
    private Integer pageSize;     //怀疑对象
    private Integer pageNum;     //怀疑对象
    private Integer searchAll;
    private Integer setting = 1;

方法一

 		  清除之前的分页设置
        PageHelper.clearPage();
//使用了此方法没用,还是会进行分页

方法二

page.setSize(-1L);
//此方法生效了,但是出现了一个奇怪的bug,sum函数聚合查询的数据没了
//注意看OtCountDto实体类中的两个属性
    private Integer pageSize;     //怀疑对象
    private Integer pageNum;     //怀疑对象
    我怀疑是这两个参数的问题,于是将
    private Integer pageSize  改成
    private Integer pageSSS
//于是成了,不进行分页查询了,我也不知道为什么
//开始说解决方法,上面更改参数名解决了问题,但是为了命名规范,舍弃了上面的方法
//使用BeanUtil转成map集合
Map<String, Object> stringObjectMap = BeanUtil.beanToMap(otCountDto);
对应的mapper和xml文件如下
public List<OtCountVo> selectOtsByOtCountDtos(@Param("params") Map<String,Object> params);
<select id="selectOtsByOtCountDtos" resultMap="OAOTResultMap" parameterType="java.util.Map">
        SELECT apply_user_id,apply_user_name,
               GROUP_CONCAT(DISTINCT apply_dept_name ORDER BY apply_dept_name ASC SEPARATOR '、') AS apply_dept_name,
                sum(ot_time_count) as sumOtTimeCount
        FROM t_oa_ot
        <trim prefix="WHERE" prefixOverrides="AND">
            <if test="params.startTime != null"> AND create_time >= #{params.startTime}</if>
            <if test="params.endTime != null "> AND #{params.endTime} >= create_time </if>
        <if test="params.applyUserIds != null and params.applyUserIds.size() > 0">
            AND apply_user_id IN
            <foreach item="params.applyUserId" collection="params.applyUserIds" open="(" separator="," close=")">
                #{params.applyUserId}
            </foreach>
        </if>
        </trim>
        GROUP BY apply_user_id
</select>
开始继续深究分页问题,查了很多资料,说是可能线程污染,在其他方法调用了startPage(),
但是发生异常没有调用对应的sql,当前线程ThreadLocal设置了分页参数但是没有被消费,
就会导致线程污染,于是我开始查看日志,确定没有此问题,但还是进行了分页,不懂,求大佬解答
//记录一个安全使用PageHelper的方法
List<Country> list;
if(param1 != null){
    PageHelper.startPage(1, 10);
    try{
        list = countryMapper.selectAll();
    } finally {
        PageHelper.clearPage();
    }
} else {
    list = new ArrayList<Country>();
}

Mybatis+springmvc的分页pageHelper实现,及报错相关记录 PageHelper下载地址:https://oss.sonatype.org/content/repositories/releases/com/github/pagehelper/pagehelper/先看看我的实现分页的主要代码@Controller public class HistoryController { @Autowired private Historyservice... 阅读详情

相关推荐

从零到一:用STM32 FOC算法驯服无刷电机的艺术

本文详细介绍了如何使用STM32和FOC算法实现无刷电机的高性能控制。从硬件搭建、参数识别到闭环调节,一步步解析FOC算法的核心原理与调优技巧,帮助开发者掌握电机控制的关键技术,实现从零到一的精准驯服。

kkk56的博客 919

PageHelper 使用示例

【代码】PageHelper 使用示例。

heshiyuan1406146854的博客 1351

01-SA8155P 冷启动强制进入EDL模式

冷启动EDL模式

静虚待令,有物混成 3095

关于Pagehelper的使用

这里写自定义目录标题关于PageHelper的使用的随手记录导入依赖加入启动项上的注解具体的使用 关于PageHelper的使用的随手记录 导入依赖 com.github.pagehelper pagehelper-spring-boot-starter 1.3.0 加入启动项上的注解 @SpringBootApplication(exclude = { PageHelperAutoConfiguration.cla

夏天的风清澈的酒 1951

手把手教你用STM32F103的IO口模拟XY2-100协议驱动数字振镜(附Keil O3优化代码)

本文详细介绍了如何使用STM32F103的IO口模拟XY2-100协议驱动数字振镜,包括协议解析、偶校验算法、寄存器级优化及Keil O3编译下的性能调优。通过硬件配置、核心代码实现和优化技巧,帮助开发者实现高速二维偏转控制,适用于工业激光雕刻和精密定位系统。

weixin_42527401的博客 261

Android 桌面小组件 AppWidgetProvider

桌面小组件,绝对是小程序中的小程序,说白了就是任何复杂一丁点的操作都适合做成桌面小组件。所以这里采用的演示的例子,就只有一个白色圆角背景,外加一个文本框,显示文字。小组件的教程网上一搜一大堆,所以我这里主要就是介绍一些坑的地方,跟大致处理流程,具体细节还得看其他大神的骚操作。

qq_33601179的博客 6584

PageHelper分页失效通过手动分页处理

【代码】PageHelper分页失效通过手动分页处理。

不忘初心,砥砺前行 337

(BS ISO 11898-1:2015)CAN_FD 总线协议详解1- 基本概念描述

本文对can总线协议做了详细的讲解,can协议里面的每一个知识点都做了详细且举一反三的论述,读了本文可以不用读can协议了。

zhangziranzm的博客 2315

记录一点mybatis的坑

如果想在更近一步,由于是线程复用 或 查询sql未执行 导致 没法执行clearPage,那么 可以写一个切面,在方法执行前,执行一下clearPage。startPage执行后,紧跟的一个查询语句 会被加上limit对应的参数,然后自动执行clearPage(),以免其他语句受到 分页的影响。但是如果我们没有 执行查询语句,那么,这个分页可能会被使用到下面 执行查询的语句中。比如在一次偶然中, 这个查询语句执行到了service里的一个查询语句。

qq_64071349的博客 422

Python 爬虫实战:爬取豆瓣读书评论并分析

摘要:本文以豆瓣读书《活着》评论数据为例,详细讲解Python爬虫开发与文本分析全流程。首先通过requests库爬取评论数据,解决分页、反爬等问题;然后利用BeautifulSoup解析页面提取评论内容、评分等核心信息;最后结合jieba进行关键词提取、snownlp完成情感分析,并通过可视化展示结果。分析显示该书评分以5星为主(占比70%),正面评论达82%,核心关键词为"活着""余华""生命"。全文包含完整代码与详细解析,帮助读者掌握非结构化

2503_91057718的博客 1497

PyTorch深度学习实战(47)——使用PyTorch构建Transformer模型

相较于传统模型,如循环神经网络 (RNN),Transformer 的优势在于能够理解输入和输出序列中元素之间的关系,在大语言模型 (如 ChatGPT 和 DeepSeek) 的发展中起到了关键作用,为了从零开始构建 Transformer,首先探讨自注意力机制,包括查询 (query)、键 (key) 和值 (value) 向量,以及缩放点积注意力 (SDPA)。将层归一化和残差连接集成到多头注意力层中,并与前馈层结合,构建编码器层,堆叠编码器层构建编码器,还将实现 Transformer 中的解码器。

盼小辉丶的博客 3万+

PageHelper 使用中的一些坑

关于PageHelper的介绍就这么多,真的是折磨我好几天,要不是项目紧急,来不及替换,我一定不会使用这个组件。莫名其妙的就会有个方法出现问题,一通排查,发现都是这个PageHelper导致的。虽然我已经全局搜索使用的地方,保证后紧跟sql命令,但是仍然有嫌犯潜逃,只能在有问题的方法使用来打补丁。虽然PageHelper给我带来一些困扰,耗费了一定的时间,但是定位问题的过程中,也学习了mybatis和pagehepler的实现方式,对于热爱源码阅读的同学来说还是有一定的提升的。

程序员高级码农的博客 1516

【Settings随记:二】一级菜单,二级菜单的添加与隐藏,添加辅助功能

首先会去调用父类的onCreatePreferences(Bundle savedInstanceState, String rootKey)方法,然后调用addPreferencesFromResource(R.xml.assistant_function)方法(这个方法是父类的)加载二级菜单的xml配置文件,实现创建二级菜单,这个配置文件路径在res/xml/assistant_function.xml。controller:该item的控制器,控制它的内容展示,是否可用,也可以控制它的点击事件等。

镇元子的博客 1596

记录一个初试pagehelper的坑

pagehelper使用背景: 1.没有mybatis-config.xml文件 2.用的5.0以后的版本 出现问题:分页失败,pagesize==total 解决方法: 1.导入com.github.jsqlparser 2.新建MybatisConfiguration类,@Configuration修饰,将pageinterceptor交给ioc容器管理 @Bean public PageInterceptor getPageInterceptor() { PageI..

LuvFeral的博客 188

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

PageHelper分页的那些坑,你中了几个?来我教你如何避坑

原因分析:这种情况下由于sysMenuSearchDTO 存在null的情况,就会导致pageHelper生产了一个分页参数,但是没有被消费,这个参数就会一直保留在这个线程上。当这个线程再次被使用时,就可能导致不该分页的方法去消费这个分页参数,这就产生了莫名其妙的分页。它可以帮助企业更高效地处理大量数据,提高用户体验,满足特定的业务需求,并确保系统的稳定运行。点击下方公众号进入关注,后台回复【PageHelper】即可获取所有资料,大量的商用级方案已经更新,记得关注,免费领取,标记星号哟!

竹林幽深 3479

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【PageHelper】踩坑记录

no such constructor: com.github.pagehelper.parser.defaults.DefaultCountSqlParser.()void/newInvokeSpecial

亦翼的博客 1336

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

记录pageHelper分页orderby的坑

pageHelper的count查询会过滤查询sql中的order by条件! pageHelper分页功能很强大,如果开启count统计方法,在你执行查询条件时会再执行一条selet count(*) from 的sql, 这个结果就是pageinfo属性中total的值。但是我在项目中遇到一个坑(total总数和自己sql查出的结果不一致),首先看我的sql: SELECT t2.*...

weixin_30655569的博客 5229

PageHelper的坑

没有设置分页查询,但是出现了分页查询

qq_41222911的博客 982

PageHelper参数配置supportMethodsArguments以及MyBatis分页插件PageHelper踩坑记录

问题现象 带有Limit 的 SQL都默认在后边继续拼接了 limit ?,? 导致SQL语法报错 pageHelper 难道不是必须开启才能使用吗 ?自动拼接什么鬼?? PageHelper.startPage(1,10); 问题分析 经过一番分析,发现是由于加入了配置 supportMethodsArguments 参数,默认是false, 官方介绍 注意: 官方介绍的不是特别清楚,其实这是个自动分页的配置,依据的是入参,如果参数中有pageNum,pageSize分页参数,则会自动分页.

u014748504的博客 4503

spring集成pagehelper,遇坑记录

    为公司的网站开发了一个简单的任务管理系统,使用的是mybatis,无疑,分页是真的麻烦,写的想吐,就在GitHub上找了这个分页插件,pagehelper。完了之后不会用,就去找各位大佬用过的代码,看起来真的很简单,结果我搞了两三个小时都分不了页,终于在一位大佬那里找到了原因,仅作为经验记录下来。有错欢迎指正,不喜勿喷!集成很简单,总共就分为三步:    第一,maven依赖(如果不是ma...

zhouhai6833的博客 8988

记录踩过的坑之PageHelper

记录踩过的坑之PageHelper

qq_40448491的博客 796

PageHelper踩坑记录

使用PageHelper.startPage方法后查询语句返回的对象和pageInfo封装的对象不是同一个的时候会出现Total(总记录数)值不正确的情况,此时Total = PageSize,修改如下代码 public ResponseBean getDatas(int pageNum, int pageSize){ PageHelper.startPage(pageNum, p...

qq_36412672的博客 387

关于PageHelper的坑,导致莫名其妙的sql错误的问题

关于PageHelper的坑,导致莫名其妙的sql错误的问题 前言 PageHelper 用得好,能省很多功夫。用得不好会埋下很大的隐患,并且很难发现。本文就是讨论这个很难发现的坑。 症状 出现莫名其妙的分页混乱 原来不分页的sql却只查出了部分数据,观察sql发现sql被添加了limit 或者sql语句报错 观察该sql语句有limit,但limit后面又被添加了limit 上述症状比...

w8y56f的专栏 7431

PageHelper分页原理与隐藏坑

PageHelper分页原理与隐藏坑欢迎使用Markdown编辑器新的改变 欢迎使用Markdown编辑器 最近项目使用的PageHelper发生一个神奇的分页问题 代码没有使用分页,但是在运行的时候却发生了分页,而且还是偶现,因此研究了一番PageHelper的分页原理,在此记录一番。 新的改变 maven依赖 <dependency> <groupId>com.github.pagehelper</groupId> <artifactId&g

clsq0913的博客 5041

PageHelper分页的使用过程记录(自己踩的坑记一下)

pagehelper 一个分页的插件,今天使用的时候还是出了错误,所以在这边记录一下。 在pom.xml中加上 <!--pagehelper分页插件--> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <v

qq_42002393的博客 499

PageHelper踩坑

PageHelper踩坑 刚开始死活分不了页,只显示默认的前 10条。搞了一下午,打了无数个断点都试不出毛病在哪。 下班又死磕到快8点,就在我已经绝望的时候,最后终于试出来了,把page.getTotal()给传到前端就好了。。。 public TableDataI...

weixin_30486037的博客 560
上一篇: SET和JSON类型学习
下一篇: JSON parse error: Cannot deserialize value of type java.util.ArrayList<SalarySecurityDto> f解决方法
不早睡不改名@
博客等级 码龄5年 536粉丝 306原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值