PageHelper是Mybatis的一个插件,可以比较智能化的实现分页,把参数都封装到PageInfo中,我们实现分页,首先应该了解PageInfo参数说明,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 firstPage;
//前一页
private int prePage;
//是否为第一页
private boolean isFirstPage = false;
//是否为最后一页
private boolean isLastPage = false;
//是否有前一页
private boolean hasPreviousPage = false;
//是否有下一页
private boolean hasNextPage = false;
//导航页码数
private int navigatePages;
//所有导航页号
private int[] navigatepageNums;
我用的是maven+jsp+ssm实现这个分页。其中包括中间所出的问题
1,我们先导入依赖
pom.xml
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.1</version>
</dependency>
2,在配置SqlSessionFactory的里边添加如下代码,如果不添加这个会出现PageInfo的数据不正确,比如总数应该是20条,但是它只显示当前页面的条数。
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 注入数据库连接池 -->
<property name="dataSource" ref="dataSource"/>
<!-- 配置MyBaties全局配置文件:mybatis-config.xml -->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
<!-- 扫描pojo包 使用别名 -->
<property name="typeAliasesPackage" value="com.zxzc.pojo"/>
<!-- 扫描sql配置文件:mapper需要的xml文件 -->
<property name="mapperLocations" value="classpath:mapper/*.xml"/>
**//添加这个plugins属性值**
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties">
<!--可以不用配置,使用默认的就可以 -->
<value>
</value>
</property>
</bean>
</array>
</property>
</bean>
3,后台代码展示(如果PageHelper.startPage(pageNum, pageSize)后边除了如下所示展示所有信息这一个逻辑之外,还有另外的逻辑代码,则PageHelper分页失败,PaheInfo中参数会乱)
@ResponseBody @RequestMapping("/list") public ModelAndView list(@RequestParam(value = "pageNum",defaultValue = "1")int pageNum,
@RequestParam(value = "pageSize",defaultValue = "8")int pageSize,
Map<String,Object> map){
PageHelper.startPage(pageNum, pageSize);
List<OrderDesc> orderDescList = managerOrderService.findAllList();
PageInfo<OrderDesc> pageInfo = new PageInfo<>(orderDescList);
map.put("pageInfo",pageInfo);
map.put("pageNum",pageNum);
map.put("size",pageSize);
return new ModelAndView("manage/manageOrderList",map); }
4,JSP页面展示,用的bootstrap的模板
<div class="row">
<div class="col-md-6">
第${pageInfo.pageNum}页,共${pageInfo.pages}页,共${pageInfo.total}条记录
</div>
<div class="col-md-6 offset-md-4">
<nav aria-label="Page navigation example">
<ul class="pagination pagination-sm">
<c:if test="${pageInfo.hasPreviousPage}">
<li class="page-item">
<a class="page-link" href="/manage/order/list?pageNum=${pageInfo.pageNum-1}">
上一页
</a>
</li>
</c:if>
<c:if test="${pageInfo.isFirstPage==true}">
<li class="page-item">
<a class="disabled" href="#">
上一页
</a>
</li>
</c:if>
<c:forEach items="${pageInfo.navigatepageNums}" var="page">
<c:if test="${page==pageInfo.pageNum}">
<li class="page-item active">
<a class="page-link" href="#">${page}</a></li>
</c:if>
<c:if test="${page!=pageInfo.pageNum}">
<li class="page-item">
<a class="page-link" href="/manage/order/list?pageNum=${page}">
${page}
</a>
</li>
</c:if>
</c:forEach>
<c:if test="${pageInfo.hasNextPage}">
<li class="page-item">
<a class="page-link" href="/manage/order/list?pageNum=${pageInfo.pageNum+1}">
下一页
</a>
</li>
</c:if>
<c:if test="${pageInfo.isLastPage==true}">
<li class="page-item">
<a class="disabled" href="#">
下一页
</a>
</li>
</c:if>
</ul>
</nav>
</div>
</div>
这是测试的时候后台传过来的数据,PageInfo的所有信息
测试结果如下这就是PageHelper实现分页,请大家看准那几个问题,我也总结的不太全,总共遇见这几个问题,如果又补充或者错误,希望各位提出宝贵意见!