您的位置:首页 > 其它

mybatis分页插件---PageHeper

2017-05-02 15:00 141 查看
PageHelper是一款使用非常简单的Mybatis分页插件,在Mybatis的配置文件中以插件的形式使用。使用步骤如下:

一、导入jar包

jsqlparser-0.9.5.jar
pagehelper-4.2.1.jar


二、修改配置文件

在mybatis.xml配置文件中加入以下代码

<plugins>
<plugin interceptor="com.github.pagehelper.PageHelper">
<!-- 设置数据库类型 Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库-->
<property name="dialect" value="mysql"/>
</plugin>
</plugins>
三、工作原理

PageHelper是通过mybatis的pulgin实现了Interceptor接口,工作过程如下:



pageHelper会使用ThreadLocal获取到同一线程中的变量信息,各个线程之间的Threadlocal不会相互干扰,也就是Thread1中的ThreadLocal1之后获取到Tread1中的变量的信息,不会获取到Thread2中的信息。所以在多线程环境下,各个Threadlocal之间相互隔离,可以实现,不同thread使用不同的数据源或不同的Thread中执行不同的SQL语句。

因此,PageHelper利用这一点通过拦截器获取到同一线程中的预编译好的SQL语句之后将SQL语句包装成具有分页功能的SQL语句,并将其再次赋值给下一步操作,所以实际执行的SQL语句就是有了分页功能的SQL语句

四、PageHelper的使用

在service层调用Dao层之前,使用PageHelper进行分页,就可以将分页信息切入到sql语句中了。

PageHelper.startPage(pageNum ,pageSize);
//ִ调用服务层,服务层调用DAO来执行sql语句
List<Category> list = categoryService.queryMessage(Integer.parseInt(id));
pageNum表示当前处于第几页,pageSize表示每页显示多少条记录

使用PageHelper进行分页后,代码中list集合对象中就得到的是分页后的信息。为了方便使用“上一页”、“下一页”、“首页”等等分页信息,一般需要将分页后的list对象再进行封装,封装后就可以使用“总页码”,“上一页”等这种功能。

五、将结果封装成PageInfo对象

PageInfo<Category> page=new PageInfo<Category>(list);
PageInfo类中的信息如下:

//当前页
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;
......
由此可见,封装成PageInfo对象的好处。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: