mybatis分页插件pageHelper使用详解
一直以来都用的是自己封装的一个pageBean类来处理分页相关的业务,这个pageBean是从传智播客的视频上面学到的,最近看到别人写的都是用的mybatis的pageHelper,所以自己也心痒痒,将自己的一个竞赛管理系统的分页也换成了pageHelper的方式。话不多说,直接上配置。
首先要使用mybatis的这个插件就必须在mybatis的配置文件中配置插件的相关设置。
mybatis-config.xml :
<configuration>
<typeAliases>
<package name="cn.ljtnono.jsgl.pojo" />
<package name="cn.ljtnono.jsgl.vo" />
</typeAliases>
<plugins>
<plugin interceptor="com.github.pagehelper.PageHelper">
<!--使用的方言,值有mysql oracle SqlServer等-->
<property name="dialect" value="mysql"/>
<!-- 该参数默认为false -->
<!-- 设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用 -->
<!-- 和startPage中的pageNum效果一样-->
<property name="offsetAsPageNum" value="true"/>
<!-- 该参数默认为false -->
<!-- 设置为true时,使用RowBounds分页会进行count查询 -->
<property name="rowBoundsWithCount" value="true"/>
<!-- 设置为true时,如果pageSize=0或者RowBounds.limit = 0就会查询出全部的结果 -->
<!-- (相当于没有执行分页查询,但是返回结果仍然是Page类型)
<property name="pageSizeZero" value="true"/>-->
<!-- 3.3.0版本可用 - 分页参数合理化,默认false禁用 -->
<!-- 启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页 -->
<!-- 禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据 -->
<property name="reasonable" value="true"/>
<!-- 3.5.0版本可用 - 为了支持startPage(Object params)方法 -->
<!-- 增加了一个`params`参数来配置参数映射,用于从Map或ServletRequest中取值 -->
<!-- 可以配置pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值 -->
<!-- 不理解该含义的前提下,不要随便复制该配置
<property name="params" value="pageNum=start;pageSize=limit;"/> -->
</plugin>
</plugins>
<!-- 在这里环境标签默认填写的是id为mysql的环境,与spring整合后就废除了环境标签 -->
<!-- 配置从哪里读取mapper文件 -->
<mappers>
<package name="cn.ljtnono.jsgl.dao" />
</mappers>
</configuration>
这里解释下各种参数:
1、dialect 方言,相信大家不会陌生,就是配置数据库类型,常见的值有mysql、oracle、SqlServer等。这一项是必须配置的。
2、增加offsetAsPageNum属性,默认值为false,则使用默认值时不需要增加该配置,需要设为真时,需要配置该参数。当该参数设置为真时,使用RowBounds分页时,会将偏移参数当成页次使用,可以用页码和页面大小两个参数进行分页。
后面两个参数的作用在注释中解释的非常清楚了,这里不再赘述,关于参数还有好几个,大家可以查看https://github.com/pagehelper/Mybatis-PageHelper github官方文档。
然后就是使用了,这里以查询一个竞赛列表信息为例子。
@Override
public PageInfo<Contest> getContestListByModality(int modality, int currentPage) {
Map<String,Object> map = new HashMap<>(1);
PageInfo<Contest> pageInfo = null;
map.put("modality",modality);
try {
PageHelper.startPage(currentPage,CURRENTCOUNT);
List<Contest> list = contestDaoMapper.selectByModality(map);
pageInfo = new PageInfo<>(list);
} catch (Exception e) {
e.printStackTrace();
}
return pageInfo;
}
在PageHelper.startPage() 后面的第一个查询会默认使用分页查询,也就是说不必自己再写一个sql去查询总的条数。查询出来的结果使用pageInfo这个类进行接收。
PageInfo这个类中封装了分页所需要的各种参数,十分方便。
下面贴出PageInfo的源代码:
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
package com.github.pagehelper;
import java.io.Serializable;
import java.util.List;
public class PageInfo<T> implements Serializable {
private static final long serialVersionUID = 1L;
private int pageNum;
private int pageSize;
private int size;
private int startRow;
private int endRow;
private long total;
private int pages;
private List<T> list;
private int firstPage;
private int prePage;
private int nextPage;
private int lastPage;
private boolean isFirstPage;
private boolean isLastPage;
private boolean hasPreviousPage;
private boolean hasNextPage;
private int navigatePages;
private int[] navigatepageNums;
........
}
参数解释:
pageNum :当前页码数。
pageSize : 每一页装的条数。
size : 查询出来的总的页数。
startRow :从哪一条开始查询的。
endRow : 哪一条结束。
total : 总的条数。
pages : 总的页数。
list : 记录集合。
firstPage : 第一页。
prePage : 上一页。
nextPage : 下一页。
lastPage : 最后一页。
isFirstPage : 是否是第一页。
isLastPage :是否是最后一页。
hasPreviousPage : 是否有前一页。
hasNextPage : 是否有后一页。
navigatePages : 导航总的页数。
navigatepageNums : 页数集合。即从第一页到最后一页的页码数。
这个类使用真的很方便,可以直接使用EL表达式来取值。
在jsp中使用EL表达式取值:
contest.jsp :
<tbody>
<c:forEach items="${pageInfo.list}" var="contest">
<tr>
<td>
${contest.theam}
</td>
<td class="modality">
<c:if test="${contest.modality == 0}">
个人
</c:if>
<c:if test="${contest.modality == 1}">
团队
</c:if>
<c:if test="${contest.modality == 2}">
个人/团队
</c:if>
</td>
<td>${contest.way}</td>
<td>${contest.deadline}</td>
<td>${contest.startTime}</td>
<td>${contest.endTime}</td>
<td>
<input type="button" value="操作" class="signUpOne btn btn-xs" data-contestId="${contest.id}">
</td>
</tr>
</c:forEach>
</tbody>
以上就是最简单的pageHelper使用教程了,如果需要深入了解使用方式,请参考github:https://github.com/pagehelper/Mybatis-PageHelper。