Mybatis中使用pageHelper进行分页

Mybatis中使用pageHelper 进行分页

pageHelper 是mybatis中一种良好的分页插件,它可以支持任何复杂的单表、多表分页,使用也是非常的简单。

1.导入maven坐标(或者jar包)
		<dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.1.2</version>
        </dependency>
2.配置拦截器插件(二选一即可)

注:此操作须在ssm整合后

  1. 在 MyBatis 配置 xml 中配置拦截器插件

    <!-- 
        plugins在配置文件中的位置必须符合要求,否则会报错,顺序如下:
        properties?, settings?, 
        typeAliases?, typeHandlers?, 
        objectFactory?,objectWrapperFactory?, 
        plugins?, 
        environments?, databaseIdProvider?, mappers?
    -->
    <plugins>
        <!-- com.github.pagehelper为PageHelper类所在包名 -->
        <plugin interceptor="com.github.pagehelper.PageInterceptor">
         	<!-- 使用下面的方式配置参数,后面会有所有的参数介绍 -->
            <property name="param1" value="value1"/>
            <!--例:分页参数合理化  
    		<property name="reasonable" value="true"/>
    		-->
    	</plugin>
    </plugins>
    
  2. 在 Spring 配置文件中配置拦截器插件

    使用 spring 的属性配置方式,可以使用 plugins 属性像下面这样配置:

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
      <!-- 注意其他配置 -->
      <property name="plugins">
        <array>
          <bean class="com.github.pagehelper.PageInterceptor">
            <property name="properties">
              <!--使用下面的方式配置参数,一行配置一个 -->
              <value>
                params=value1
              </value>
              <!--例:分页参数合理化  
              <value>reasonable=true</value>
              -->
            </property>
          </bean>
        </array>
      </property>
    </bean>
    
3.设置controller页面,在controller中完成分页

通过接收jsp传过来的 page size参数 来调用service方法

/**
     * 查询员工数据
     * @return
     */
    @RequestMapping("/emps")
    public String getEmps(@RequestParam(value = "pn",defaultValue = "1") Integer pn, Model model){
        //分页查询 使用pagehelper分页插件   在查询之前只需要调用 传入页码 以及每页得多少
        PageHelper.startPage(pn,5);
        //startPage后面紧跟的查询就是一个分页查询
        List<Employee> employees = employeeService.getAll();
        //使用pageInfo包装查询后的结果 只需要将pageinfo交给页面就可以了
        //这里面封装了详细的分页信息 包括我们查询的数据 传入连续显示的页数
        PageInfo page = new PageInfo(employees,5);
        model.addAttribute("pageInfo",page);
        return "list";
    }

或者:

//required = true(要求必须携带参数),defaultValue = "1" (带了参数会接收,如果没带参数则设置一个默认值为1)
	@RequestMapping("/emps")
    public ModelAndView findAll(@RequestParam(name="page",required = true,defaultValue = "1")int page) throws Exception{
    	PageHelper.startPage(pn,5);
        ModelAndView mv = new ModelAndView();
        List<User> all = ordersService.findAll();
        //使用PageInfo来封装查询的数据
        PageInfo pageInfo = new PageInfo(all,5);
        
        mv.addObject("pageInfo",pageInfo);
        //返回的页面
        mv.setViewName("list");
        return mv;
    }
4.编写jsp页面 具体实现分页效果

补充: 在PageInfo对象中具体的属性 ,了解了这些我们在进行分页时更容易操作

    //当前页
    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 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;

这些实现的原理都是通过jsp带参传递到controller中来实现调用方法从而实现的分页查询的各个效果。

1.显示表格数据

    <div class="row">
        <div class="col-md-12">
            <table class="table table-hover">
                <tr>
                    <th>#</th>
                    <th>empName</th>
                    <th>gender</th>
                    <th>email</th>
                    <th>deptName</th>
                    <th>操作</th>
                </tr>
                <!--因为实体类存到model中,而model有存到pageInfo中 即获取用户信息 pageInfo
               .list-->
                <c:forEach items="${pageInfo.list}" var="emp">
                    <tr>
                        <th>${emp.empId}</th>
                        <th>${emp.empName}</th>
                        <th>${emp.gender=="M"?"男":"女"}</th>
                        <th>${emp.email}</th>
                        <th>${emp.department.deptName}</th>
                        <th>
                            <button class="btn btn-primary btn-xs">
                                 <span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>
                                编辑
                            </button>
                            <button class="btn btn-primary btn-xs">
                                <span class="glyphicon glyphicon-trash" aria-hidden="true"></span>
                                删除
                            </button>
                        </th>
                    </tr>
                </c:forEach>
            </table>
        </div>
    </div>

2.显示分页信息

   <div class="row">
        <%--分页文字信息--%>
        <div class="col-md-6">
            当前总记录数:${pageInfo.total}条
            当前页数:${pageInfo.pageNum}页
            总页数:${pageInfo.pages}页
        </div>
        <%--分页条信息--%>
        <div class="col-md-6">
            <nav aria-label="Page navigation">
                <ul class="pagination">
                    <li><a href="${pageContext.request.contextPath }/emps?pn=1">首页</a></li>
                    <c:if test="${pageInfo.hasPreviousPage}">
                        <li>
                            <a href="${pageContext.request.contextPath }/emps?pn=${pageInfo.pageNum-1}" aria-label="Previous">
                                <span aria-hidden="true">&laquo;</span>
                            </a>
                        </li>
                    </c:if>

                   <c:forEach items="${pageInfo.navigatepageNums}" var="page_num">
                       <c:if test="${pageInfo.pageNum==page_num}">
                           <li class="active"><a href="${pageContext.request.contextPath  }/emps?pn=${page_num}">${page_num}</a></li>
                       </c:if>
                       <c:if test="${pageInfo.pageNum!=page_num}">
                           <li><a href="${pageContext.request.contextPath  }/emps?pn=${page_num}">${page_num}</a></li>
                       </c:if>
                   </c:forEach>
                    <c:if test="${pageInfo.hasNextPage}">
                        <li>
                            <a href="${pageContext.request.contextPath }/emps?pn=${pageInfo.pageNum+1}" aria-label="Next">
                                <span aria-hidden="true">&raquo;</span>
                            </a>
                        </li>
                    </c:if>
                    <li><a href="${}/emps?pn=${pageInfo.pages}">末页</a></li>
                </ul>
            </nav>
        </div>
    </div>
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值