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

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实现Mybatis的插件分页(SSM+maven+jsp)
测试结果如下PageHelper实现Mybatis的插件分页(SSM+maven+jsp)这就是PageHelper实现分页,请大家看准那几个问题,我也总结的不太全,总共遇见这几个问题,如果又补充或者错误,希望各位提出宝贵意见!