MyBatis分页插件PageHelper的具体使用

MyBatis分页插件PageHelper

如果你也在用 MyBatis,建议尝试该分页插件,这一定是最方便使用的分页插件。分页插件支持任何复杂的单表、多表分页。

PageHelper是一个Mybatis的分页插件, 负责将已经写好的sql语句, 进行分页加工.

PageHelper的使用

优点:无需你自己去封装以及关心sql分页等问题,使用很方便,前端取数据也很方便。

1.引入pagehelper依赖

<dependency>

<groupId>com.github.pagehelper</groupId>

<artifactId>pagehelper</artifactId>

<version>5.1.2<ersion>

</dependency>

2.配置applicationContext.xml文件

在spring的sqlsessionfactory的bean中增加一个分页拦截器属性

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

<property name="plugins">

<array>

<bean class="com.github.pagehelper.PageInterceptor">

<property name="properties">

<value>

<!-- 这里设定你的数据库类型 -->

helperDialect=mysql

</value>

</property>

</bean>

</array>

</property>

</bean>

3.调用PageHelper的方法

在service方法中调用PageHelper的静态方法startPage(注意一定要在实际查询数据库之前调用该方法),传入需要查询的页号和每页大小,返回PageHelper插件提供的PageInfo对象。即可自动完成数据库物理分页,无须在你的sql语句中手工加limit子句

4. PageInfo的结构

关于PageInfo的结构请参看源码,这里通过返回的json来展示。根据需要取PageInfo对象的相应属性即可。

5.PageInfo类说明

类源码(更多源码去github上查看即可):

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;

public PageInfo() {

}

/**

* 包装Page对象

*

* @param list

*/

public PageInfo(List<T> list) {

this(list, 8);

}

/**

* 包装Page对象

*

* @param list page结果

* @param navigatePages 页码数量

*/

public PageInfo(List<T> list, int navigatePages) {

if (list instanceof Page) {

Page page = (Page) list;

this.pageNum = page.getPageNum();

this.pageSize = page.getPageSize();

this.pages = page.getPages();

this.list = page;

this.size = page.size();

this.total = page.getTotal();

//由于结果是>startRow的,所以实际的需要+1

if (this.size == 0) {

this.startRow = 0;

this.endRow = 0;

} else {

this.startRow = page.getStartRow() + 1;

//计算实际的endRow(最后一页的时候特殊)

this.endRow = this.startRow - 1 + this.size;

}

} else if (list instanceof Collection) {

this.pageNum = 1;

this.pageSize = list.size();

this.pages = this.pageSize > 0 ? 1 : 0;

this.list = list;

this.size = list.size();

this.total = list.size();

this.startRow = 0;

this.endRow = list.size() > 0 ? list.size() - 1 : 0;

}

if (list instanceof Collection) {

this.navigatePages = navigatePages;

//计算导航页

calcNavigatepageNums();

//计算前后页,第一页,最后一页

calcPage();

//判断页面边界

judgePageBoudary();

}

}

.......

}

这里只列出所有属性和构造方法,那么可以清晰的看到一些属性的含义,一些属性是如何初始化,并且初始化值是怎样的,更多详细情况可以自己去查看源码,都有中文注释

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是 MyBatis分页插件PageHelper的具体使用 的全部内容, 来源链接: utcz.com/z/318699.html

回到顶部