您的位置:首页 > Web前端 > JavaScript

PageHelper实现Mybatis的插件分页(SSM+maven+jsp)

2019-03-13 21:31 417 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_38105115/article/details/88542059

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实现分页,请大家看准那几个问题,我也总结的不太全,总共遇见这几个问题,如果又补充或者错误,希望各位提出宝贵意见!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: