SpringBoot学习之路:05.Spring Boot集成pagehelper分页插件

Stella981
• 阅读 619

         前面说了Spring Boot集成持久层框架Mybatis的过程,和使用mybatis进行对数据库进行CRUD的操作,然而当对多数据进行查询时就需要进行分页了,分页技术分为客户端分页和服务器端分页(数据库分页),客户端分页是前端的数据插件对返回的数据集进行分页(bootstrup table、qui table等),客户端分页会对数据库和客户端都造成一定的性能压力,所以一般都是进行服务器分页。今天我们在Spring Boot 中集成比较好用的分页插件pagehelper,很简单的就实现了数据分页。

注意:pagehelper是需要配合着Mybatis的拦截器实现的

1.pagehelper分页插件的简介

使用pagehelper插件可以很好的结合MyBatis进行分页查询,该分页插件支持任何复杂的单表、多表分页。目前支持如下数据库:

  1. Oracle
  2. Mysql
  3. MariaDB
  4. SQLite
  5. Hsqldb
  6. PostgreSQL
  7. DB2
  8. SqlServer(2005,2008)
  9. Informix
  10. H2
  11. SqlServer2012
  12. Derby

该插件是github上的开源项目,感兴趣的可以去看源码,该项目的github地址是:

https://github.com/pagehelper/Mybatis-PageHelper

https://github.com/pagehelper/pagehelper-spring-boot

2.引入pagehelper分页插件的依赖

使用该插件在pom文件引入依赖即可:

com.github.pagehelper

pagehelper

4.1.6

springboot中推荐使用启动器依赖


            com.github.pagehelper
            pagehelper-spring-boot-starter
            1.2.5

3.在mybaits配置对改插件的拦截器

/**
 * @func mybatis配置信息
 * @user MaxBill(zuishuai)
 * @date 2017-03-06
 */
@Configuration
public class MybatisConfig {

@Bean
    public SqlSessionFactory sqlSessionFactory() throws Exception {
        SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
        sqlSessionFactory.setDataSource(dataSource());
        sqlSessionFactory.setFailFast(true);
        // 分页插件
        PageHelper pageHelper = new PageHelper();
        Properties properties = new Properties();
        properties.setProperty("dialect", "mysql");
        properties.setProperty("offsetAsPageNum", "true");
        properties.setProperty("rowBoundsWithCount", "true");
        properties.setProperty("pageSizeZero", "true");
        properties.setProperty("reasonable", "true");
        pageHelper.setProperties(properties);
        // 添加插件
        sqlSessionFactory.setPlugins(new Interceptor[]{pageHelper});
        return sqlSessionFactory.getObject();
    }

@Bean
    public DataSourceTransactionManager transactionManager() {
        return new DataSourceTransactionManager(dataSource());
    }

@PostConstruct
    public void postConstruct() {
    }
}

以上就实现了该插件了mybatis的集成(使用了mybatis的拦截器)

4.插件的使用方式

PageHelper只对紧跟着的第一个SQL语句起作用

1、统计总数,(将SQL语句变为 select count(0) from xxx,只对简单SQL语句其效果,复杂SQL语句需要自己写)

Page<?> page = PageHelper.startPage(1,-1);

long count = page.getTotal();

2、分页,pageNum - 第N页, pageSize - 每页M条数

A、只分页不统计(每次只执行分页语句)

PageHelper.startPage([pageNum],[pageSize]);

List<?> pagelist = queryForList( xxx.class, "queryAll" , param);

//pagelist就是分页之后的结果

B、分页并统计(每次执行2条语句,一条select count语句,一条分页语句)适用于查询分页时数据发生变动,需要将实时的变动信息反映到分页结果上

Page<?> page = PageHelper.startPage([pageNum],[pageSize],[iscount]);

List<?> pagelist = queryForList( xxx.class , "queryAll" , param);

long count = page.getTotal();

//也可以 List<?> pagelist = page.getList();  获取分页后的结果集

3、使用PageHelper查全部(不分页)

PageHelper.startPage(1,0);

List<?> alllist = queryForList( xxx.class , "queryAll" , param);

4、PageHelper的其他API

String orderBy = PageHelper.getOrderBy();    //获取orderBy语句

Page<?> page = PageHelper.startPage(Object params);

Page<?> page = PageHelper.startPage(int pageNum, int pageSize);

Page<?> page = PageHelper.startPage(int pageNum, int pageSize, boolean isCount);

Page<?> page = PageHelper.startPage(pageNum, pageSize, orderBy);

Page<?> page = PageHelper.startPage(pageNum, pageSize, isCount, isReasonable); 

5、默认值

//RowBounds参数offset作为PageNum使用 - 默认不使用

private boolean offsetAsPageNum = false;

//RowBounds是否进行count查询 - 默认不查询

private boolean rowBoundsWithCount = false;

//当设置为true的时候,如果pagesize设置为0(或RowBounds的limit=0),就不执行分页,返回全部

private boolean pageSizeZero = false;

//分页合理化

private boolean reasonable = false;

//是否支持接口参数来传递分页参数,默认false

private boolean supportMethodsArguments = false;  

5.需要注意的问题

在使用该插件的时候不要使用最新的,本文使用的是4.1.6的版本,高版本在和mybaits的拦截器集成式会有问题。

注意:最新版本的已经不需要复杂的配置,只需要引入依赖包,然后直接使用即可,详情可见官网文档:https://pagehelper.github.io/

6.使用实例

SpringBoot学习之路:05.Spring Boot集成pagehelper分页插件

这是最简单的应用,在查询日志列表的前面写上:

Page pager =PageHelper.startPage(page, limit);

传入page当前页,和limit每页数量即可自动分页,无需其他额外的配置,使用方便

点赞
收藏
评论区
推荐文章
菜鸟阿都 菜鸟阿都
2年前
pageHelper一对多分页解决方案
前言   pageHelper是一款优秀的Mybatis分页插件,在项目中可以非常便利的使用,使开发效率得到很大的提升,但不支持一对多结果映射的分页查询,所以在平时的使用时,对于一对多分页会出现分页错误,这篇文章主要对pageHelper分页错误进行重现以及提出解决方案。分析    mybatis进行一对多查询时,映射文件(mapper.xml
全栈角度看分页处理
分页是webapplication开发最常见的功能。在使用不同的框架和工具过程中,发现初始行/页的定义不同,特意整理记录。从这个技术点去看不同层的实现。以及不同语言实现的对比。文章会从正常的web结构分层的角度去梳理不同层的处理。分为数据库分页、服务端分页、前端分页
Easter79 Easter79
2年前
ssm+PageHelper实现分页查询
通过搭建ssm框架,然后通过mybatis的分页插件pagehelp进行分页查询。源码:https://gitee.com/smfx1314/pagehelper看一下项目结构:!(https://oscimg.oschina.net/oscnet/62738252a25e8c7d8d60f9f9bcf7cb51695.png)首先创建
Wesley13 Wesley13
2年前
MyBatis学习总结(17)——Mybatis分页插件PageHelper
如果你也在用Mybatis,建议尝试该分页插件,这一定是最方便使用的分页插件。分页插件支持任何复杂的单表、多表分页,部分特殊情况请看重要提示(http://git.oschina.net/free/Mybatis_PageHelper/blob/master/wikis/Important.markdown)。想要使用分页插件?请看如何使用分页
Stella981 Stella981
2年前
Spring Boot2.X+mybatis+Druid+PageHelper实现多数据源并分页,支持多个字段动态排序,结构层级分明,代码耦合,框架入门
一、SpringBoot整合Mybatis、Druid和PageHelper并实现多数据源和分页,支持多个字段动态排序,其中对分页插件进行了封装,满足于任何场景的开发Druid是一个数据库连接池。Druid可以说是目前最好的数据库连接池!因其优秀的功能、性能和扩展性方面,深受开发人员的青睐。Druid已经在阿里巴巴部署了超过600个应用,经过一年多
Stella981 Stella981
2年前
Mybatisplus实现在不分页时进行排序操作以及用分页接口实现全量查询
优化分页插件实现在不分页时进行排序操作原生mybatisplus分页与排序是绑定的,mpp优化了分页插件,使用MppPaginationInterceptor插件<br在不分页的情况下支持排序操作<brpage参数size设置为1可实现不分页取全量数据,同时设置OrderItem可以实现排序<br使用MppPaginationInt
Wesley13 Wesley13
2年前
JavaEE——Mybatis(17)
•1、PageHelper插件进行分页 JavaEE——Mybatis(18)MyBatis实用场景1.PageHelper插件分页(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fwww.cnblogs.com%2FSkyeAngel%2Fp%2F8491741.h
Easter79 Easter79
2年前
SpringBoot学习之路:05.Spring Boot集成pagehelper分页插件
      前面说了SpringBoot集成持久层框架Mybatis的过程,和使用mybatis进行对数据库进行CRUD的操作,然而当对多数据进行查询时就需要进行分页了,分页技术分为客户端分页和服务器端分页(数据库分页),客户端分页是前端的数据插件对返回的数据集进行分页(bootstruptable、quitable等),客户端分页会对数据库和客
Wesley13 Wesley13
2年前
mysql5.6 分页查询优化
mysql5.6分页查询优化场景:表结构:主键(非自增)contentCode(varchar),过滤条件列为updateTime(timeStamp),已经为timestamp建立索引。搜索sql为:SELECTFROMmy_hello_tableWHEREupdat
Stella981 Stella981
2年前
JFinal各种场景(PC、APP、微信小程序等)分页方案
JFinal专题之分页解决方案【课程介绍】 详细介绍数据库分页原理,自己动手封装前端分页组件,然后介绍第三方的js分页组件,集成laypage插件,了解各种分页模式,不管是跳转分页,数据库分页、前端分页、滚动加载分页、ajax数据分页、APP移动端分页、微信小程序分页等【课程目标】 掌握数据库分页原理,熟练使用JFinal操作数据库分页查