MyBatis分页插件PageHelper的具体使用

网友投稿 363 2023-01-13


MyBatis分页插件PageHelper的具体使用

MyBatis分页插件PageHelper

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

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

PageHelper的使用

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

1.引入pagehelper依赖

com.github.pagehelper

pagehelper

5.1.2

2.配置applicationContext.xml文件

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

helperDialect=mysql

3.调用PageHelper的方法

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

4. PageInfo的结构

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

5.PageInfo类说明

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

public class PageInfo 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 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 list) {

this(list, 8);

}

/**

* 包装Page对象

*

* @param list page结果

* @param navigatePages 页码数量

*/

public PageInfo(List 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.pagehttp://Size = 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();

}

}

.......

}

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


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:spring aop之链式调用的实现
下一篇:java实现学生选课系统
相关文章

 发表评论

暂时没有评论,来抢沙发吧~