PageHelper的使用

PageHelper的使用

PageHelper是国内非常优秀的一款开源的mybatis分页插件,它支持基本主流与常用的数据库,例如mysql、oracle、mariaDB、DB2、SQLite、Hsqldb等。

1.集成

在使用PageHelper前,我们需要在项目中集成PageHelper,有两种方法。

1.引入jar包

https://github.com/pagehelper/Mybatis-PageHelper

由于使用了sql解析工具,我们还需要下载jsqlparser.jar

https://github.com/JSQLParser/JSqlParser

2.使用maven

在pom.xml文件中添加如下依赖

<dependency>
    <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper</artifactId>
    <version>5.1.2</version>
</dependency>

2.配置

在本文章的案例中,我们是在一个ssm框架的项目中使用PageHelper,所有我们需要在spring配置文件中添加配置,

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <!-- 传入PageHelper的插件 -->
        <property name="plugins">
            <array>
                <!-- 传入插件的对象 -->
                <bean class="com.github.pagehelper.PageInterceptor">
                    <property name="properties">
                        <props>
                        <!--helperDialect :分页插件会自动检测当前的数据库链接,自动选择合适的分页方式。-->
                            <prop key="helperDialect">oracle</prop>
                        <!--分页合理化参数,默认值为 false 。当该参数设置为 true 时, pageNum<=0 时会查询第一页, pageNum>pages (超过总数时),会查询最后一页。默认 false 时,直接根据参数进行查询。-->
                            <prop key="reasonable">true</prop>
                        </props>
                    </property>
                </bean>
            </array>
        </property>
    </bean>

3.使用:订单分页查询

1. 在业务层实现PageHelper.startPage 静态方法调用

public List<Orders> findAll(int page, int size) throws Exception {
    //参数pageNum 是页码值   参数pageSize 代表是每页显示条数
    //一定要写在数据库调用前
    PageHelper.startPage(page, size);
    return ordersDao.findAll();
}

2.编写表现层分页代码

@RequestMapping("/findAll.do")
public ModelAndView findAll(@RequestParam(name = "page", required = true, defaultValue = "1") int page, @RequestParam(name = "size", required = true, defaultValue = "4") int size) throws Exception {
    ModelAndView mv = new ModelAndView();
    List<Orders> ordersList = ordersService.findAll(page, size);
    //PageInfo就是一个分页Bean
    PageInfo pageInfo=new PageInfo(ordersList);
    mv.addObject("pageInfo",pageInfo);
    mv.setViewName("orders-page-list");
    return mv;
}

在这里传入ModelAndView的数据,不只要有查询结果集,还需要有分页相关数据。PageHelper为我们提供了一个分页Bean,可以实现这样的要求。

3.编写订单分页查询页面

1.遍历数据结果集

<c:forEach items="${pageInfo.list}" var="orders">
	<tr>
		<td><input name="ids" type="checkbox"></td>
		<td>${orders.id }</td>
		<td>${orders.orderNum }</td>
		<td>${orders.product.productName }</td>
		<td>${orders.product.productPrice }</td>
		<td>${orders.orderTimeStr }</td>
		<td class="text-center">${orders.orderStatusStr }</td>
		<td class="text-center">
		    <button type="button" class="btn bg-olive btn-xs">订单</button>
		    <button type="button" class="btn bg-olive btn-xs" onclick="location.href='${pageContext.request.contextPath}/orders/findById.do?id=${orders.id}'">详情</button>
		    <button type="button" class="btn bg-olive btn-xs">编辑</button>
		</td>
	</tr>
</c:forEach>

2.实现点击页码跳转页面

<div class="box-tools pull-right">
    <ul class="pagination">
        <li>
            <a href="${pageContext.request.contextPath}/orders/findAll.do?page=1&size=${pageInfo.pageSize}" aria-label="Previous">首页</a>
        </li>
        <li><a href="${pageContext.request.contextPath}/orders/findAll.do?page=${pageInfo.pageNum-1}&size=${pageInfo.pageSize}">上一页</a></li>
        <c:forEach begin="1" end="${pageInfo.pages}" var="pageNum">
			<li><a href="${pageContext.request.contextPath}/orders/findAll.do?page=${pageNum}&size=${pageInfo.pageSize}">${pageNum}</a></li>
		</c:forEach>
        <li><a href="${pageContext.request.contextPath}/orders/findAll.do?page=${pageInfo.pageNum+1}&size=${pageInfo.pageSize}">下一页</a></li>
        <li>
            <a href="${pageContext.request.contextPath}/orders/findAll.do?page=${pageInfo.pages}&size=${pageInfo.pageSize}" aria-label="Next">尾页</a>
        </li>
    </ul>
</div>

3.实现动态修改每页显示条数

function changePageSize() {
	//获取下拉框的值
	var pageSize = $("#changePageSize").val();

	//向服务器发送请求,改变每页显示条数
	location.href = "${pageContext.request.contextPath}/orders/findAll.do?page=1&size="+ pageSize;
}

<div class="form-group form-inline">
    总共2 页,共14 条数据。 每页
    <select class="form-control" id="changePageSize" onchange="changePageSize()">
        <option>1</option>
        <option>2</option>
        <option>3</option>
        <option>4</option>
        <option>5</option>
    </select></div>

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值