简介
PageHelper是国内非常优秀的一款开源的mybatis分页插件,它支持基本主流与常用的数据库,例如mysql、oracle、mariaDB、DB2、SQLite、Hsqldb等。
配置
首先导入依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.2</version>
</dependency>
PageHelper本身是属于mybatis的一个插件,所以在ssm,我们要在整合mybatis的配置中进行配置。
<!--配置生产SqlSession对象的工厂-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!--扫描pojo包,给包下所有pojo对象起别名-->
<property name="typeAliasesPackage" value="com.itcc.domain"/>
<!-- 传入PageHelper的插件 -->
<property name="plugins">
<array>
<!-- 传入插件的对象 -->
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties">
<props>
<prop key="helperDialect">oracle</prop>
<prop key="reasonable">true</prop>
</props>
</property>
</bean>
</array>
</property>
</bean>
helperDialect 属性来指定分页插件使用哪种方言。配置时,可以使用下面的缩写值:oracle , mysql , mariadb , sqlite , hsqldb , postgresql , db2 , sqlserver , informix , h2 , sqlserver2012 , derby
reasonable :分页合理化参数,默认值为 false 。当该参数设置为 true 时, pageNum<=0 时会查询第一页, pageNum>pages (超过总数时),会查询最后一页。默认 false 时,直接根据参数进行查询。
说道这里就不得不说我的一个失误了。在配置的时候我是从其他工程复制过来的,但是哪个工程使用的是mysql数据库,而这个是oracle,一开始没有改,后面测试时一直报错,错误是sql语句未正确结束,当时花了大概半个小时打断点找错误,可代码并没有问题,排除代码那就剩配置问题了,看了配置文件才发现了这个失误。。。此处心情比较复杂
配置完后使用就比较简单了
我们只需重点掌握一种方法 在你需要进行分页的 MyBatis 查询方法前调用PageHelper.startPage 静态方法即可,紧跟在这个方法后的第一个MyBatis 查询方法会被进行分页。
public List<Order> findAll(int pageNum,int pageSize) throws Exception {
//pageNum为当前页码值,pageSize为当前页数量
PageHelper.startPage(pageNum,pageSize);
return ordersDao.findAll();
}
@RequestMapping("/findAll")
public ModelAndView findAll(@RequestParam(name = "pageNum",defaultValue = "1") int pageNum,@RequestParam(name = "pageSize",defaultValue = "4") int pageSize) throws Exception{
ModelAndView mv = new ModelAndView();
List<Order> orderList = ordersService.findAll(pageNum, pageSize);
//pageInfo就是一个分页bean
PageInfo pageInfo = new PageInfo(orderList);
mv.addObject("pageInfo",pageInfo);
mv.setViewName("orders-page-list");
return mv;
}
这里pageInfo就是一个分页bean,看源码很清晰,把它放入request域中再在前端拿出来用就好