首页 > 其他分享 >PageHelper插件注意事项

PageHelper插件注意事项

时间:2023-11-30 15:11:34浏览次数:42  
标签:插件 分页 List PageHelper PageInfo 注意事项 page

PageHelper插件注意事项

  • 使用PageHelper.startPage后要紧跟查询语句

    下面的代码就有可能出问题:

    PageHelper.startPage(10, 10);
    if(param != null) {
        List<Data> data = dataMapper.select(example);
    }
    

    因为如果param == null,那么就会导致设置了分页插件但却没有执行查询,此时 PageHelper 已经在当前线程的 ThreadLocal 里面设置了分页参数,但是没有被消费,这个参数就会一直保存在这个线程里。当这个线程继续往后跑或者被复用时遇到一条 SQL 语句, 就可能会导致不该分页的方法去消费这个分页参数,导致预期之外的结果。所以上面的代码应该写出下面这样,保证使用分页插件后立即执行 SQL 语句。

    PageHelper.startPage(10, 10);
    List<Data> data = dataMapper.select(example);
    

    这样就不会污染线程,PageHelper 插件内部会在执行完 SQL 语句后自动清除在 ThreadLocal 中存储的分页信息。

  • PageInfo获取分页信息

    对于上面的代码,可以使用下面的代码获取分页信息:

    PageInfo info = new PageInfo(data);
    

    这是因为使用 PageHelper 后,mybatis 执行查询返回的 List 被 PageHelper 拦截处理了,最终返回的 List 是 Page 的子类,里面保存有分页信息,这点可以通过 PageInfo 的构造函数看出:

    public PageInfo(List<? extends T> list, int navigatePages) {
            super(list);
            this.isFirstPage = false;
            this.isLastPage = false;
            this.hasPreviousPage = false;
            this.hasNextPage = false;
            if (list instanceof Page) {		
                Page page = (Page)list;		// 在这里打断点使用分页插件返回的List会通过该if判断
                this.pageNum = page.getPageNum();
                this.pageSize = page.getPageSize();
                this.pages = page.getPages();
                this.size = page.size();
                if (this.size == 0) {
                    this.startRow = 0L;
                    this.endRow = 0L;
                } else {
                    this.startRow = page.getStartRow() + 1L;
                    this.endRow = this.startRow - 1L + (long)this.size;
                }
            }
    		...
    }
    

    所以尽量不要修改分页插件返回的 List,否则通过 PageInfo 获取分页信息时会得到错误的信息。

标签:插件,分页,List,PageHelper,PageInfo,注意事项,page
From: https://www.cnblogs.com/214txdy/p/17867421.html

相关文章

  • vscode 文件上传快捷键 shift+alt+s (ftp专用)插件用的 ftp-sync
    vscode文件上传快捷键shift+alt+s(ftp专用)插件用的ftp-sync{"key":"shift+alt+s","command":"extension.ftpsyncuploadselected"}......
  • 指针的注意事项
    1.如果在代码里面这么写char*cp="123";...if(*cp)...if(!*cp)...第一个if指cp这个指针当前指向的地址是否是cp最开始指向的字符串的有效位里面(不包含'\0')第二个if当然就是反过来了2.如果常量指针(const)要赋值给普通指针,必须加上显式类型转换,比如constint*p=&x;int*......
  • IDEA安装Transaction插件
    1、在IDEA插件中搜索Transaction2、配置自己的翻译引擎因为谷歌停止了大陆的谷歌翻译服务,所有使用不了谷歌翻译引擎,但可以配置自己的翻译引擎现在默认是微软的翻译引擎如果想配置其他的请参考博客:https://blog.csdn.net/qq_33204709/article/details/130436443......
  • 超好用的IDEA插件
    IDEA是一款功能强大的集成开发环境(IDE),它可以帮助开发人员更加高效地编写、调试和部署软件应用程序。我们在编写完接口代码后需要进行接口调试等操作,一般需要打开额外的调试工具。今天给大家介绍一款IDEA插件:Apipost-Helper-2.0。代码写完直接编辑器内调试、还支持生成接口文档、接......
  • 超好用的IDEA插件
    IDEA是一款功能强大的集成开发环境(IDE),它可以帮助开发人员更加高效地编写、调试和部署软件应用程序。我们在编写完接口代码后需要进行接口调试等操作,一般需要打开额外的调试工具。今天给大家介绍一款IDEA插件:Apipost-Helper-2.0。代码写完直接编辑器内调试、还支持生成接口文档、接......
  • 小惊喜继续-vscode插件小更新:基于文件名中的 PostId 关联博文
    在惊喜小现:园子的vscode插件的预热博文发布后,今天发布插件的一个小更新——基于文件名中包含的PostId关联博文。将本地文件与服务端博文进行关联是通过插件在vscode中管理博文的基础,当您在插件的“随便列表”中点击一篇博文,会自动在工作空间的目录中创建以博文标题命名的文......
  • IDEA插件:Apipost Helper使用
    Apipost-Helper是由Apipost推出的IDEA插件,写完接口可以进行快速调试,且支持搜索接口、根据method跳转接口,还支持生成标准的API文档,注意:这些操作都可以在代码编辑器内独立完成,非常好用!这里给大家介绍一下Apipost-Helper的安装和使用安装在IDEA编辑器插件中心输入Apipost搜索安装:......
  • 超好用的IDEA插件
    IDEA是一款功能强大的集成开发环境(IDE),它可以帮助开发人员更加高效地编写、调试和部署软件应用程序。我们在编写完接口代码后需要进行接口调试等操作,一般需要打开额外的调试工具。今天给大家介绍一款IDEA插件:Apipost-Helper-2.0。代码写完直接编辑器内调试、还支持生成接口文档、......
  • 浏览器插件 Obsidian web 与 Obsidian 插件 local rest api 结合配置过程记录
    1.安装浏览器插件能到这里的肯定是已经有Obsidian了.首先要安装chrome浏览器插件Obsidianweb如图2.安装Obsidian上的插件插件名为localrestapi,如图3.设置浏览器插件配置对应的Obsidianweb中设置上localrestapi的信息,需要简单理解一下,就是......
  • Jmeter 中的公式与注意事项
    一、jmeter中的常用计算公式1.Ramp-Up时间:NumberofThreads(线程数) /Ramp-Up,表示每个请求间的间隔时间,当Ramp-Up为0时表示同时并发2.TPS=完成的事务数据/完成这些事务数所费时间(当使用了事务控制器);TPS=完成的请求数/完成这些请求数所费时间(未使用事务控制器)3.QPS= ......