PageHelper 导致 SQL莫名分页的问题处理

编程入门 行业动态 更新时间:2024-10-11 11:18:13

PageHelper 导致 SQL莫名<a href=https://www.elefans.com/category/jswz/34/1769545.html style=分页的问题处理"/>

PageHelper 导致 SQL莫名分页的问题处理

PageHelper 导致 SQL莫名分页的问题处理


项目上使用PageHelper插件做分页功能,但是最近系统偶尔报服务器异常。
经过排查原因是存在一条SQL执行出错

 SELECT * FROM (  SELECT TMP_PAGE.*, ROWNUM ROW_ID FROM ( select TEST_SEQ.nextval from dual ) TMP_PAGE) WHERE ROW_ID <= ? AND ROW_ID > ?

经过排查,该SQL的方法不可能存在分页的逻辑。
故怀疑是PageHelper 的使用,导致的SQL错误。

PageHelper是借助ThreadLocal实现分页功能的。Tomcat 使用的是线程池技术来处理HTTP的请求,当一个请求信息处理完毕后,该线程将被返回到线程池中。下一个请求来,继续从线程池中获取线程来处理。如果放回线程池中的线程的ThreadLocal 存在垃圾数据,那么这个垃圾数据将会对新的请求造成影响。

基于以上的猜测做了实验写了一个filter输出分页信息,结果证实了猜测内容。部分请求会输出分页信息:

@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,FilterChain filterChain) throws IOException, ServletException {Page<Object> page = PageHelper.getLocalPage();System.out.println(page);PageHelper.clearPage();filterChain.doFilter(servletRequest, servletResponse);}
问题的解决:添加filter,利用PageHelper.clearPage(), 清楚掉历史线程中的垃圾信息。造成问题的原因:部分使用PageHelper 没有使用好,应该严格按照 一个PageHelper.startPage 接着一个Mapper的查询。如果混乱的使用PageHelper就会导致以上问题。

更多推荐

PageHelper 导致 SQL莫名分页的问题处理

本文发布于:2024-03-08 13:32:35,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1721020.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:分页   PageHelper   SQL

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!