mybatis分页插件PageHelp的使用

1.简介

​ PageHelper 是国内非常优秀的一款开源的 mybatis 分页插件,它支持基本主流与常用的数据库,例如 mysql、oracle、mariaDB、DB2、SQLite、Hsqldb 等。需要注意的是,该插件是mybatis的插件,无法使用到其他的持久层框架上。下面附上官网地址

网址:https://pagehelper.github.io/

2.使用步骤

2.1 导入依赖

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

2.2 在mybatis的配置文件中添加配置

<!--sqlSessionFactory-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="typeAliasesPackage" value="cn.test.domain"/>
        <property name="plugins">
            <array>
                <bean class="com.github.pagehelper.PageInterceptor">
                    <property name="properties">
                        <!--使用下面的方式配置参数,一行配置一个 -->
                        <value>
                            params=mysql
                        </value>
                    </property>
                </bean>
            </array>
        </property>
    </bean>

解析:

其中红色部分为pagehelp插件的配置,蓝色方框部分根据你的数据库的类型进行配置,我这里使用了mysql。所以配置了params=mysql

2.3 在代码中使用

使用PageHelper.startPage 静态方法调用

// PageInfo等同于我们自定义的pageBean 并且比pageBean更完善
public PageInfo<User> findByPage(Integer page, Integer pageSize) {
   PageHelper.startPage(page,pageSize);  //使用分页插件 一定要紧跟一个查询方法
   List<User> list = userDao.findAll(); //表面上是查询所有,但是执行时已经分页了
   return new PageInfo<Company>(list,5);
}

解析

2.4 PageInfo对象介绍

使用该插件返回的是PageInfo对象,下面我们对其中的属性进行分析:

public class PageInfo<T> implements Serializable {
   private static final long serialVersionUID = 1L;
   //当前页
   private int pageNum;
   //每页的数量
   private int pageSize;
   //当前页的数量
   private int size;
 
   //由于startRow和endRow不常用,这里说个具体的用法
   //可以在页面中"显示startRow到endRow 共size条数据"
 
   //当前页面第一个元素在数据库中的行号
   private int startRow;
   //当前页面最后一个元素在数据库中的行号
   private int endRow;
   //总记录数
   private long total;
   //总页数
   private int pages;
   //结果集
   private List<T> list;
 
   //前一页
   private int prePage;
   //下一页
   private int nextPage;
 
   //是否为第一页
   private boolean isFirstPage = false;
   //是否为最后一页
   private boolean isLastPage = false;
   //是否有前一页
   private boolean hasPreviousPage = false;
   //是否有下一页
   private boolean hasNextPage = false;
   //导航页码数
   private int navigatePages;
   //所有导航页号
   private int[] navigatepageNums;
   //导航条上的第一页
   private int navigateFirstPage;
   //导航条上的最后一页
   private int navigateLastPage;

}

猜你喜欢

转载自www.cnblogs.com/changchangchang/p/12021895.html