【工具】Pagehelper分页工具

一、介绍

Pagehelper是mybatis一个插件,主要是更加方便地进行分页查询;pagehelpe分页插件给我们封装了很多参数,不用我们再去硬性编码获取各种参数。

将查到的分页数据包装成com.github.pagehelper.Page或者com.github.pagehelper.PageInfo对象当中,Page或者PageInfo的对象就会包含分页信息,比如每页数量、当前页数、总条数、上一页或下一页等分页信息。

二、PageHelper的使用

主要以Springboot项目为示例

2.1 首先需要导入依赖

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

● gradle依赖导入:

implementation group: 'com.github.pagehelper', name: 'pagehelper', version: '5.1.10'

2.2 配置yml文件

○ 配置文件

pagehelper:
	helperDialect: mysql
	reasonable: true
	supportMethodsArguments: true
	params: pageNum=pageNum;pageSize=pageSize;

○ 配置项详解

#格式:  
# pagehelper:
#		xxxxx: xx
# 如:
# pagehelper:
#   offsetAsPageNum: false 

# 常用配置:
# helperDialect:      数据库方言, 默认:分页插件会自动检测当前的数据库链接,自动选择合适的分页方式
#													可选择 oracle,mysql,postgresql,db2,sqlserver,sqlserver2012 等

# offsetAsPageNum:    默认值为 false, 该参数对使用 RowBounds 作为分页参数时有效。 
#													当该参数设置为 true 时,会将 RowBounds 中的 offset 参数当成 pageNum 使用,
#													可以用页码和页面大小两个参数进行分页。

# rowBoundsWithCount: 默认值为false,该参数对使用 RowBounds 作为分页参数时有效。 
#													当该参数设置为true时,使用 RowBounds 分页会进行 count 查询。

# pageSizeZero:       默认值为 false,当该参数设置为 true 时,如果 pageSize=0 或者 RowBounds.limit = 0 就会
#													查询出全部的结果(相当于没有执行分页查询,但是返回结果仍然是 Page 类型)。

# reasonable:         分页合理化参数,默认值为false。当该参数设置为 true 时,pageNum<=0 时会查询第一页, 
#													pageNum>pages(超过总数时),会查询最后一页。默认false 时,直接根据参数进行查询。

# params:             为了支持startPage(Object params)方法,增加了该参数来配置参数映射,用于从对象中根据属性名取值, 
#													可以配置 pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值, 
#													默认值为pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero。

# supportMethodsArguments 支持通过 Mapper 接口参数来传递分页参数,默认值false,分页插件会从查询方法的参数值中,
#															自动根据上面 params 配置的字段中取值,查找到合适的值时就会自动分页

2.3 使用方式

● 静态方法,传递两个参数(当前页码,每页查询条数)
● 使用pageHelper 分页的时候,不再关注分页语句,查询全部的语句
● 自动的对PageHelper.startPage 方法下的第一个sql 查询进行分页

// pageNum 当前页数, pageSize 每页条数;
/* 注意:  
	1. 只有紧跟在PageHelper.startPage方法后的第一个Mybatis的查询(Select)方法会被分页。
	2. 由于嵌套结果方式会导致结果集被折叠,因此分页查询的结果在折叠后总数会减少,所以无法保证分页结果数量正确。
*/

// 步骤一:
// 参数分别是设置 当前的页数pageNum 和 每页的数量pageSize
PageHelper.startPage(pageNum, pageSize);
// 步骤二:
// startPage后面跟着的查询就会进行分页查询
List<Employee> employeeList = employeeMapper.example();
// 步骤三:
// 使用PageInfo包装查询后的结果,只要将PageInfo中的信息返回给页面
// PageInfo封装了详细的分页信息,包括查询出来的数据employeeList
PageInfo<Employee> pageResult = new PageInfo<>(employeeList);

2.4 其他方式的使用

// 说明:
//	 其他方式 针对 2.3中的步骤一、二步的不同使用方式

// 方式一:
PageHelper.offsetPage(pageNum, pageSize);
List<Employee> list1 = employeeMapper.example();

// 方式二:
//  参数方法调用
//      1. 接口方法定义, xml 中不需要处理这两个参数  List<Employee> selectByPageNumSize(@Param("pageNum") int pageNum, @Param("pageSize") int pageSize);
//      2. supportMethodsArguments=true
List<Employee> list2 = employeeMapper.selectByPageNumSize(pageNum, pageSize);

三、Page和PageInfo的区分

3.1 Page和PageInfo介绍

两者都能获取到数据,

  • Page是一个ArrayList。
    在这里插入图片描述
  • PageInfo是一个对象,能获取到的数据比Page多。
    在这里插入图片描述

3.2 Page和PageInfo常用属性

  • Page常用属性:
private int pageNum;	//当前页码
private int pageSize; 	//每页数据的数量
private int startRow;	//始页首行行号
private int endRow;		//尾页尾行行号
private long total;		//总记录数
private int pages;		//总页数
private Boolean reasonable; //分页合理化
private Boolean pageSizeZero; //当设置为true的时候,如果pagesize设置为0(或RowBounds的limit=0),就不执行分页,返回全部结果
  • PageInfo常用属性:
private int pageNum;   			//当前页
private int pageSize;			//每页显示数据条数
private int size;				//当前页的数量
private int startRow; 			//始页首行行号
private int endRow;				//尾页尾行行号
private long total;				//总记录数
private int pages;				//总页数
private List<T> list;			//查询结果的数据
private int firstPage;			//首页
private int prePage;			//上一页
private int nextPage;			// 下一页
private int lastPage;			//最后一页
private boolean isFirstPage;	//是不是第一页
private boolean isLastPage;		//是不是最后一页
private boolean hasPreviousPage;//有没有上一页
private boolean hasNextPage;	//有没有下一页
private int navigatePages;		//所有导航页号
private int[] navigatepageNums;	//导航页码数

3.3 Page和PageInfo的使用

  • 首先,就是开启分页,设置 pageNum:当前页 和 pageSize:每页记录数,2.3使用方式中使用示例的步骤一;
  • 然后,就利用Mybatis根据上面设置的分页条件,去查询数据库,得到查询结果,2.3使用方式中使用示例的步骤二;
  • 然后,可以根据前端对分页数据格式的要求,把上一步骤中查到的分页数据,包装成Page对象或者PageInfo对象
    • 包装成Page对象
Page<Employee> pageResult = (Page<Employee>) employeeList;
  • 包装成PageInfo对象
PageInfo<Employee> pageResult = new PageInfo<>(employeeList);

四、总结

  • PageHelper是分页插件,结合mybatis、spring 使用;
  • 只需要在需要执行的sql上面,加入代码 PageHelper.startPage(pageNum, pageSize),就可以实现;
  • 分页原理是通过ThreadLocal 或者 开启自动查找参数中的分页参数,在执行真实sql 之前查询总数,然后返回Page(list)对象,实现分页效果。
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: PageHelper是一款开源的Java分页插件,它能够帮助我们方便地进行分页操作。使用PageHelper插件,我们只需要在查询数据的方法中加入分页参数即可实现分页功能,无需手动编写SQL语句进行分页。 在使用PageHelper插件时,我们需要在项目中引入PageHelper的依赖包,并在MyBatis的配置文件中配置插件。配置完成后,在查询数据时,我们只需要在查询方法中添加分页参数即可,PageHelper会自动进行分页,并将分页后的结果集返回给我们。例如: ``` //指定分页参数 PageHelper.startPage(pageNum, pageSize); //调用查询方法 List<User> userList = userDao.getUserList(); //获取分页信息 PageInfo<User> pageInfo = new PageInfo<>(userList); ``` 其中,`pageNum`表示当前页码,`pageSize`表示每页显示的记录数。PageHelper会自动根据这两个参数进行分页,并将分页后的结果集返回给我们。我们也可以通过PageInfo对象获取分页信息,如总记录数、总页数等。 使用PageHelper插件可以使我们的分页操作更加方便、简洁,提高开发效率。 ### 回答2: PageHelper是一个基于MyBatis的分页插件,它帮助开发者快速、方便地实现分页功能。通过PageHelper,我们可以快速完成对于大数据量查询结果的分页操作,提高了查询效率和用户体验。 PageHelper的使用非常简便。首先,我们需要在项目的pom.xml文件中添加PageHelper的依赖。然后,在MyBatis的配置文件中,配置PageHelper的插件。这样,我们就可以在数据库查询时,使用PageHelper提供的工具类进行分页了。 具体的使用方式如下: 1. 在查询方法前,调用PageHelper的startPage方法,设置要查询的页码和每页显示的数量。例如:PageHelper.startPage(1, 10),表示查询第一页,每页显示10条记录。 2. 执行查询操作,PageHelper会在查询结束后自动将结果封装成一个Page对象,该对象包含了查询的结果列表、总记录数等信息。 3. 可以通过Page对象的getTotal()方法获取查询结果的总记录数,可以通过getPageNum()和getPageSize()方法获取当前页码和每页显示数量。 4. 可以通过Page对象的getList()方法获取查询结果的列表。 PageHelper还提供了很多其他的功能,如支持分页插件的属性设置、参数绑定、物理分页、翻页方式选择等。可以根据实际需求进行配置和使用。 总结来说,PageHelper是一个非常好用的分页插件,通过它可以实现快速、方便的分页功能。它提供了丰富的功能和灵活的配置选项,可以满足不同场景下的分页需求。通过合理使用PageHelper,我们可以提高查询效率,优化用户体验。 ### 回答3: PageHelper是一款用于实现数据库分页的开源插件,该插件支持多种数据库,包括MySQL、Oracle、SQL Server等。 使用PageHelper进行分页可以有效地减小内存开销,提高查询效率。通过简单的配置和调用,就可以实现数据的分页查询。 首先,我们需要在项目中引入PageHelper的依赖包。然后在MyBatis的配置文件中配置PageHelper的插件。 在需要进行分页查询的地方,我们只需要在查询前调用PageHelper的startPage方法即可。startPage方法接收两个参数,分别是当前页码和每页的记录数。例如,startPage(1, 10)表示查询第一页,每页10条记录。 接下来,我们进行数据库查询操作,此时查询的结果就会被自动拦截并进行分页处理。 在查询结果中,我们可以通过PageInfo对象获取到分页的详细信息,包括总记录数、总页数、当前页码等。 同时,PageHelper还支持一些其他的功能,例如设置排序规则、获取当前页的前后页码等。 需要注意的是,使用PageHelper进行分页查询时,要确保查询方法的返回类型是Page<E>类型,其中E表示查询结果的实体类。 总之,PageHelper是一个简单易用、高效可靠的分页工具,它可以帮助我们快速地实现数据库的分页查询功能。在实际开发中,只需要简单地配置和调用,就可以轻松地实现分页功能,提高系统的性能和用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值