PageHelper的使用

news2024/11/23 11:52:01

这个分页插件是在Mybatis的环境中使用的,所以项目需要导入Mybatis依赖
更加详细的用法看官方文档:PageHelper官网

在Mybatis中使用

前提条件

  1. 引入依赖
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>5.3.2</version>
</dependency>
  1. 在MyBatis中配置拦截器插件,在MyBatis的配置文件中添加如下内容:
<plugins>
    <!--设置分页插件-->
    <plugin interceptor="com.github.pagehelper.PageInterceptor"/>
</plugins>

如何使用

在你需要进行分页的 MyBatis 查询方法前调用 PageHelper.startPage 静态方法即可,紧跟在这个方法后的第一个MyBatis 查询方法会被进行分页。

	SqlSession sqlssion = MyBatisUtils.getSqlssion();  
	UserMapper mapper = sqlssion.getMapper(UserMapper.class);  
	PageHelper.startPage(1, 1);  
	List<User> aLlUsers = mapper.getALlUsers();  
	aLlUsers.forEach(System.out::println);

此方法的两个参数:

PageHelper.startPage(pageNum, pageSize);
	// pageNum 页码
	// pageSize 页面大小

未开启前:

开启后的结果集:

除了静态方法PageHelper.startPage()外,还有一个类似的静态方法PageHelper.offsetPage()

分页信息

Page对象

当开启分页后,会返回一个Page对象,这个对象中包含了分页信息

SqlSession sqlssion = MyBatisUtils.getSqlssion();  
UserMapper mapper = sqlssion.getMapper(UserMapper.class);  
Page<User> pages = PageHelper.startPage(1, 1);  
List<User> aLlUsers = mapper.getALlUsers();  
aLlUsers.forEach(System.out::println);  
System.out.println(pages);

这个Page对象中包含这些信息:

Page{
	count=true, // 
	pageNum=1, // 页码
	pageSize=1, // 页面大小
	startRow=0, // 当前页的数据的起始编号
	endRow=1, // 当前页数据的结束编号
	total=2, // 所有记录条数
	pages=2, // 所有的页数量
	reasonable=false, 
	pageSizeZero=false
}
// 当前页的数据
[
	User(id=55, username=liumingkai, password=liumingkai, age=18, sex=男, email=2222@llll.com, deleted=0)
]

PageInfo对象

PageInfo对象可以用来封装分页数据,对结果进行包装,只需要将结果集传递给PageInfo对象就好了。
此对象中的分页信息更加详细,PageInfo中包含了Page对象。

SqlSession sqlssion = MyBatisUtils.getSqlssion();  
UserMapper mapper = sqlssion.getMapper(UserMapper.class);  
// 开启分页  
PageHelper.startPage(1, 1);  
List<User> aLlUsers = mapper.getALlUsers();  
// 对结果集封装  
PageInfo<User> pageInfo = new PageInfo<>(aLlUsers);  
System.out.println(pageInfo);

来看一下这个对象的信息

PageInfo{
	pageNum=1, // 当前页码
	pageSize=1, // 页面大小
	size=1, // 当前页面的容量
	startRow=1, // 当前页的起始数据的编号
	endRow=1, // 当前页最后一条数据的编号
	total=2, // 总共有多少条数据
	pages=2, // 总共有多少页
	list=Page{// page对象的信息
		count=true, 
		pageNum=1, 
		pageSize=1, 
		startRow=0, 
		endRow=1, 
		total=2, 
		pages=2, 
		reasonable=false, 
		pageSizeZero=false
	}
	// 分页数据
	[
	User(id=55, username=liumingkai, password=liumingkai, age=18, sex=, email=2222@llll.com, deleted=0)
	], 
	prePage=0, // 前一页的页码
	nextPage=2, // 下一页的页码
	isFirstPage=true, // 是否是第一页
	isLastPage=false, // 是否是最后一页
	hasPreviousPage=false, // 是否有前一页
	hasNextPage=true, // 是否有下一页
	navigatePages=8, // 分页导航的页数量
	navigateFirstPage=1, // 分页导航的第一页页码
	navigateLastPage=2, // 分页导航的最后一页的页码
	navigatepageNums=[1, 2]}// 当前的分页导航的页码

Spring中整合

在SSM整合中,分页插件的用法是一样的,只不过配置方式是不同的。
前提是项目中已经成功整合了Mybatis(需要导入Mybatis-spring的整合依赖)
同样还需要导入PageHelper的依赖

将拦截器配置为SqlSessionFactory的属性,在Spring的配置文件中:

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
    <!-- 注意其他配置 -->  
    <property name="plugins">  
        <array>  
            <bean class="com.github.pagehelper.PageInterceptor">  
                <property name="properties"> 
                <!--使用下面的方式配置参数,一行配置一个 -->  
                    <value>params=value1</value>  
                </property>  
            </bean>  
        </array>  
    </property>  
</bean>

一般我们不需要配置参数,使用默认的PageHelper进行分页就可以

<bean class="org.mybatis.spring.SqlSessionFactoryBean">  
    <property name="dataSource" ref="dataSource"/>  
    <property name="typeAliasesPackage" value="com.liumingkai.domain"/>  
    <property name="plugins">  
        <array>  
            <bean class="com.github.pagehelper.PageInterceptor"/>  
        </array>  
    </property>  
</bean>

如果使用纯注解开发,只需要在SqlSessionFactoryBean的配置中注入依赖即可

SpringBoot中整合

PageHelper 的使用都是一样的,只不过配置方式是不同的
导入依赖

<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.3.1</version>
</dependency>

配置文件

pagehelper:
  autoRuntimeDialect: true
  reasonable: true
  supportMethodsArguments: true
  params: count=countSql

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/424928.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GANs和Generative Adversarial Nets和Vox2Vox: 3D-GAN for Brain Tumour Segmentation

参考&#xff1a; 各种生成模型&#xff1a;VAE、GAN、flow、DDPM、autoregressive models https://blog.csdn.net/zephyr_wang/article/details/126588478李沐GAN精度 x.1 生成模型家族 DGMs&#xff08;Deep Generatitve Models&#xff09;家族主要有&#xff1a;GAN&…

数据分析的目的和意义是什么?_光点科技

数据分析是一个越来越受到关注的领域&#xff0c;因为它可以帮助企业和组织利用数据来制定更明智的决策。数据分析的目的和意义是多方面的&#xff0c;例如&#xff1a; 1.了解客户需求 数据分析可以帮助企业更好地了解客户需求&#xff0c;从而制定更准确的市场营销策略。通过…

原生JS + HTML + CSS 实现快递物流信息 API 的数据链式展示

引言 全国快递物流查询 API 是一种提供实时、准确、可靠的快递物流信息查询服务的接口。它基于现有的物流信息系统&#xff0c;通过API接口的方式&#xff0c;向用户提供快递物流信息的查询、跟踪、统计等功能。使用全国快递物流查询 API&#xff0c;用户可以在自己的应用程序…

[2021 东华杯]bg3

Index介绍漏洞利用过程一.泄露Libc二.Tcache Bin Attack三.完整EXP介绍 [2021 东华杯]bg3 本题是C写的一道经典菜单堆题&#xff0c;拥有增删改查全部功能。 Bug DataBase - V3.0 - I think i am UnBeatAble 1. Upload A Bug 2. Change A Uploaded Bug 3. Get Uploaded Bug D…

企业大数据湖总体规划及大数据湖 一体化运营管理建设方案

背景&#xff1a;数据快速入湖&#xff0c;分析更加智能&#xff0c;应用更加多样&#xff0c;服务更加开放更多企业数据将进入数据湖&#xff0c;来自传统系统的数据和传感器等新型数据资源不断融合&#xff0c;数据孤岛将继续被打破。随着大数据分析能力的不断提高&#xff0…

借助Nacos配置中心实现一个动态线程池

目录 一、实现思路 二、实现说明概览 三、代码实现 DynamicThreadPool RejectedProxyInvocationHandler DynamicThreadPoolRegister DynamicThreadPoolRefresher 测试动态线程池 平常我们系统中定义的一些线程池如果要想修改的话&#xff0c;需要修改配置重启服务才能生…

『pyqt5 从0基础开始项目实战』05. 按钮点击事件之添加新数据 (保姆级图文)

目录导包和框架代码给按钮绑定一个点击事件获取输入框的数据多线程与界面更新&#xff08;新线程与UI更新的数据交互&#xff09;代码结构完整代码main文件Threads.py总结欢迎关注 『pyqt5 从0基础开始项目实战』 专栏&#xff0c;持续更新中 欢迎关注 『pyqt5 从0基础开始项目…

上海亚商投顾:沪指创年内新高 大金融、中字头集体走强

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪 沪指今日低开高走&#xff0c;午后涨超1%&#xff0c;创出近10个月以来新高&#xff0c;创业板指走势较弱&#xf…

不走弯路,AI真的能提高生产效率

AI应用虽然取得了令人瞩目的成果&#xff0c;但是在实际应用中仍存在不少困境。市面上不乏有AI绘画、AI写作、AI聊天的相关产品&#xff0c;即使Chatgpt可以写代码、写论文&#xff0c;但由于技术的有限性&#xff0c;还需要不断地优化完善才能给出更精准的答复&#xff0c;也少…

契约锁与多家软件行业伙伴达成战略合作,携手助力组织数字化转型

近日&#xff0c;契约锁电子签章与天翼云、神州数码、同望科技、宏灿软件、甄零科技、正量科技等多家软件行业伙伴达成战略合作&#xff0c;充分发挥各自专业与资源优势&#xff0c;从产品、市场、销售、技术等多方面展开深度合作&#xff0c;共同为客户提供全程数字化解决方案…

zabbix创建自定义监控模板

目录 第一章先行配置zabbix 第二章配置自定义 2.1.案列&#xff1a;自定义监控客户端服务器登录的人数需求&#xff1a;限制登录人数不超过 3 个&#xff0c;超过 3 个就发出报警信息 2.2.在 Web 页面创建自定义监控项模板 2.3.zabbix 自动发现与自动注册 总结 自定义监控…

【论文精度(李沐老师)】Generative Adversarial Nets

Abstract 我们提出了一个新的framework&#xff0c;通过一个对抗的过程来估计生成模型&#xff0c;其中会同时训练两个模型&#xff1a;生成模型G来获取整个数据的分布&#xff0c;辨别模型D来分辨数据是来自于训练样本还是生成模型G。生成模型G的任务是尽量的让辨别模型D犯错…

DI依赖注入

DI依赖注入Setter注入setter注入引用类型setter注入简单类型&#xff08;基本数据类型和字符串&#xff09;构造器注入构造器注入引用类型自动装配集合注入首先我们明确一些观点1、注入的Bean的数据包括引用类型与简单类型&#xff08;基本数据类型和字符串&#xff09;2、通过…

HTML5 地理定位

HTML5 Geolocation&#xff08;地理定位&#xff09; HTML5 Geolocation&#xff08;地理定位&#xff09;用于定位用户的位置。 Geolocation 通过请求一个位置信息&#xff0c;用户同意后&#xff0c;浏览器会返回一个包含经度和维度的位置信息&#xff01; 定位用户的位置 …

【C语言数组部分】

数组部分综述引入&#xff1a;数组概念&#xff1a;一、一维数组1.1一维数组的创建&#xff1a;1.2一维数组的初始化&#xff1a;1.2.1初始化概念&#xff1a;1.2.2完全初始化&#xff1a;1.2.3不完全初始化&#xff1a;1.3字符数组的初始化&#xff1a;1.3.1用字符初始化&…

如何解决spring的循环依赖问题?

前言 昨天我们说了什么是spring的循环依赖&#xff0c;以及产生的原因&#xff0c;今天那我们就来说说如何解决spring的循环依赖问题。 上篇文章说到过&#xff0c;只有通过setter方法进行依赖注入且是在单例模式下产生的循环依赖问题是被解决的&#xff1f; Spring是怎样解决…

rhce第二次作业

配置ssh免密登陆&#xff0c;能够通过客户端主机通过redhat用户和服务端主机基于公钥验证方式进行远程连接 [root456 ~]# hostname host [root456 ~]# bash \\更改名称[roothost ~]# su redhat …

2023年腾讯云S5云服务器性能网络收发包PPS、连接数、内网带宽能力等性能测评

腾讯云服务器标准型S5实例CPU采用Intel Xeon Cascade Lake或者Intel Xeon Cooper Lake处理器&#xff0c;主频2.5GHz&#xff0c;睿频3.1GHz&#xff0c;标准型S5云服务器基于全新优化虚拟化平台&#xff0c;配有全新的Intel Advanced Vector Extension (AVX-512) 指令集&#…

微服务+springcloud+springcloud alibaba学习笔记【Spring Cloud服务网关】(7/9)

Spring Cloud服务网关 7/91、GateWay概述2、GateWay的特性:3、GateWay与zuul的区别:4、zuul1.x的模型:5、什么是webflux:6、GateWay三大概念:6.1,路由:6.2,断言:6.3,过滤:7、GateWay的工作原理:8、使用GateWay:8.1,建module8.2,修改pom文件8.3,写配置文件8.4,主启动类8.5,针对p…

Springboot 整合 Redis 进行基本操作

SpringBoot整合Redis 首先创建 Springboot 项目。 spring-data-redis针对jedis提供了如下功能&#xff1a;1.连接池自动管理&#xff0c;并提供了一个高度封装的“RedisTemplate”类2.针对jedis客户端中大量api进行了归类封装,将同一类型操作封装为operation接口ValueOperat…