Mybatis的分页插件PageHelper用法及其案例
PageHelper: PageHelper是国内非常优秀的一款开源的mybatis分页插件,它支持基本主流与常用的数据库,例如mysql、
oracle、mariaDB、DB2、SQLite、Hsqldb等。在 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:
(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里面的信息:
(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}"