Mybatis的分页插件PageHelper用法及其案例

PageHelper: PageHelper是国内非常优秀的一款开源的mybatis分页插件,它支持基本主流与常用的数据库,例如mysql

oraclemariaDBDB2SQLiteHsqldb等。在 gitosc 的项目地址:http://git.oschina.net/free/Mybatis_PageHelper
 

用法:

(1)在 pom.xml 中添加如下依赖:

<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>最新版本</version><!-- 我的默认是5.1.2-->
</dependency>
 
(2)在 Spring 配置文件(applicationContext.xml)中配置拦截器插件
<!-- 把交给IOC管理 mybatis的SqlSessionFactory工厂 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <!-- 传入mybatis的PageHelper的插件 -->
    <property name="plugins">
        <array>
            <!-- 传入插件的对象 -->
            <bean class="com.github.pagehelper.PageInterceptor">
                <property name="properties">
                    <props>
                        <prop key="helperDialect">mysql</prop>
                        <prop key="reasonable">true</prop>
                    </props>
                </property>
            </bean>
        </array>
    </property>
</bean>

参数的意义:

helperDialect :分页插件会自动检测当前的数据库链接,自动选择合适的分页方式。 你可以配置helperDialect 属性来指定分页插件使用哪种方言。
reasonable :分页合理化参数,默认值为 false 。当该参数设置为 true 时, pageNum<=0 时会查询第一
页,此时再点击上一页就没有反应, pageNum>pages (超过总数时),会查询最后一页,此时再点击下一页也没有反应,默认 false 时,直接根据参数进行查询。
 
(3) PageHelper.startPage 静态方法调用
 
service.impl层设置(在真正执行SQL前使用pageHelper进行分页)
@Override
public List<Orders> findAll(int page,int size) throws Exception {
    //page表示当前页码,size表示每页显示的条数(必须写在执行SQL的前面,下面一行必须是查询语句,不能是其他语句)
    PageHelper.startPage(page ,size);
    return ordersDao.findAll();
}

案例:

(1)页面的请求url:

Mybatis的分页插件PageHelper用法及其案例

(2)controller类中的写法:

@RequestMapping("/findAll.do")
public ModelAndView findAll(@RequestParam(name = "page", required = true, defaultValue = "1") Integer page, @RequestParam(name = "size", required = true, defaultValue = "4") Integer size) throws Exception {
    ModelAndView mv = new ModelAndView();
    //调用service层获取查询信息
    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;
}

(3)数据返回到前端页面获取pageInfo里面的信息:

Mybatis的分页插件PageHelper用法及其案例

 
(4)前端页面代码上的书写:
 
首页:   href="${pageContext.request.contextPath}/orders/findAll.do?page=1&size=${pageInfo.pageSize}"
上一页:
href="${pageContext.request.contextPath}/orders/findAll.do?page=${pageInfo.pageNum-1}&size=${pageInfo.pageSize}"
中间页码:
<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>
下一页:
href="${pageContext.request.contextPath}/orders/findAll.do?page=${pageInfo.pageNum+1}&size=${pageInfo.pageSize}"
尾页:
href="${pageContext.request.contextPath}/orders/findAll.do?page=${pageInfo.pages}&size=${pageInfo.pageSize}"
 
Mybatis的分页插件PageHelper用法及其案例