PageHelper基础知识

news/2025/3/14 5:51:55/

使用场景

便用mybatis,可以用 pagehelper 分页 。

maven依赖

<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>4.1.6</version>
</dependency>

PageHelper配置

在resources文件夹下面,新增mybatis-config.xml,配置如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!-- 配置分页插件 --><plugins><plugin interceptor="com.github.pagehelper.PageHelper"><!-- 设置数据库类型 可以选择Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL等数据库--><property name="dialect" value="mysql"/><property name="pageSizeZero" value="true"/></plugin></plugins></configuration>

主要类及方法:

  • PageHelper类:
Page<E> startPage(int pageNum, int pageSize): 开始分页
  • Page类:
getResult(): 获取分页后的结果getTotal():获取总数
  • PageInfo类:
PageInfo(List<T> list): 构造PageInfo对象getTotal():获取总数getList(): 获取结果集

PageHelper 原理:

(1) 执行 PageHelper.startPage(),会初始化一个 ThreadLocal 属性变量 LOCAL_PAGE ,这个 ThreadLocal 属性变量会在后续设置线程副本变量 Page.

(2) PageHelper类实现了Interceptor接口。本质上是一个拦截器。
这个拦截器会在我们的sql查询语句之前,执行 SELECT count(0) 语句进行计数,
还会在startPage()之后的第一个select查询语句中加入 limit 进行分页。

select count(0) from tt_user t where t.city = 'sz';select  * from tt_user t where t.city = 'sz' order by t.create_time desc limit 0,10 ;

(3)获取 ThreadLocal 中设置的 Page 信息,获得分页的总数和结果。

PageHelper 使用:

(1)设置页数和每页数量,开始分页
PageHelper.startPage(pageNum, pageSize);

(2)查询并分页
将含有查询sql的查询方法放在startPage()后面执行即可。
注意:只有紧跟在startPage后面的第一个select语句会被分页。
PageHelper分页失效的场景: 如果你想要分页的select语句前面还有其他的select语句,只有第一个select语句会分页。

(3)获取分页的结果和总数
通过 Page或者PageInfo获取。
注意:完成分页后,就不要再对集合做过滤了,否则返回的数据不足每页的数量。

PageHelper 示例一:

//设置页数和每页数量,开始分页
PageHelper.startPage(pageNum, pageSize);
//查询并分页
//userService.selectBy(userInfoDTO) 是查询方法,替换成自己的查询方法即可。
Page<UserInfo> page = (Page<UserInfo>) userService.selectBy(userInfoDTO);
//总数
long total = page.getTotal();
//分页后得到的结果
List<UserInfo> result = page.getResult();

PageHelper 示例二:

如果分页之后,还需要进行数据转换,如下:

//设置页数和每页数量,开始分页
PageHelper.startPage(pageNum, pageSize);
//查询并分页
//userService.selectBy(userInfoDTO) 是查询的方法,替换成自己的查询方法即可。
List<UserInfo> resultList = userService.selectBy(userInfoDTO);
//可以在此进行数据转换
//...PageInfo<UserInfo> pageInfo = new PageInfo<>(resultList);
//通过pageInfo得到总数,而不是每页的数量
long total = pageInfo.getTotal();
//获取结果集
List<UserInfo> list = pageInfo.getList();

http://www.ppmy.cn/news/1167595.html

相关文章

安达发|人工智能在APS高级计划与排程中的应用

随着人工智能&#xff08;AI&#xff09;技术的发展&#xff0c;其在生产计划与排程&#xff08;APS&#xff09;领域的应用也日益广泛。APS是一种复杂的系统工程&#xff0c;它需要处理大量的数据&#xff0c;包括需求预测、资源优化、路径规划等。AI技术的应用可以帮助企业更…

2020年江西省职业院校技能大赛高职组“信息安全管理与评估”赛项任务书样题

2020年江西省职业院校技能大赛高职组 “信息安全管理与评估”赛项任务书 样题 赛项时间 9:00-12:00&#xff0c;共计3小时。 赛项信息 赛项内容 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 第一阶段 平台搭建与安全设备配置防护 任务1 网络平台搭建 9:00-12:00 1…

中文编程开发语言工具应用案例:ps5体验馆计时收费管理系统软件

中文编程开发语言工具应用案例&#xff1a;ps5体验馆计时收费管理系统软件 软件部分功能&#xff1a; 1、计时计费功能&#xff1a;只需点开始计时即可&#xff0c;时间直观显示 2、商品管理功能&#xff1a;可以管理饮料等商品 3、会员管理功能&#xff1a;支持只用手机号作…

免费Scrum管理工具-Leangoo领歌

Leangoo领歌是一款永久免费的专业的敏捷开发管理工具&#xff0c;提供端到端敏捷研发管理解决方案&#xff0c;涵盖敏捷需求管理、任务协同、进展跟踪、统计度量等。 
 Leangoo领歌上手快、实施成本低&#xff0c;可帮助企业快速落地敏捷&#xff0c;提质增效、缩短周期、加速…

【大揭秘】美团面试题:ConcurrentHashMap和Hashtable有什么区别?一文解析!

正文 亲爱的小伙伴们&#xff0c;大家好&#xff01;我是小米&#xff0c;一个热爱技术分享的程序员&#xff0c;今天我为大家带来了一篇有关美团面试题的热门话题&#xff1a;ConcurrentHashMap 和 Hashtable 有什么区别。这个问题在Java面试中常常被拿来考察对多线程编程的理…

2023年软件测试工具总结 —— 接口测试工具

接口测试的全称是应用程序编程接口&#xff08;API&#xff09;测试&#xff0c;从原理上来说&#xff0c;接口测试是模拟客户端向服务器端发送请求&#xff0c;然后检查能否获得正确的返回信息。接口测试用于测试RESTful API、SOAP Web服务&#xff0c;这些服务可以通过HTTP、…

发挥服务器的无限潜能:创意项目、在线社区和更多

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 ✨特色专栏&#xff1a…

Redis调试

启动Redis 管理工具-》服务-》Redis软件启动Redis 进入redis的安装目录下&#xff0c;在地址栏输入“cmd”&#xff0c;回车 2)然后会进入cmd界面&#xff0c;直接运行命令redis-server.exe redis.windows.conf。如果报错&#xff0c;依次执行第一条指令&#xff1a;redis-cli…