1.PageHelper 分页插件(一)简介
简介
PageHelper是国内非常优秀的一款开源的mybatis分页插件, 它支持基本主流与常用的数据库, 例如mysql、 oracle、 mariaDB、 DB2、 SQLite、 Hsqldb等。
本项目在 github 的项目地址: https://github.com/pagehelper/Mybatis-PageHelper
本项目在 gitosc的项目地址: http://git.oschina.net/free/Mybatis_PageHelper
2.PageHelper 分页插件(二)如何使用PageHelper
2.1 添加PageHelper依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.2</version>
</dependency>
2.2 在applicationContext.xml spring与mybatis整合配置文件中配置
<!--4. Spring整合Mybatis关键配置,创建SqlsessionFactory工厂-->
<bean class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!-- 注意其他配置 -->
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties">
<!--使用下面的方式配置参数,一行配置一个 -->
<value>
helperDialect=oracle
reasonable=true
</value>
</property>
</bean>
</array>
</property>
</bean>
3.分页(一)dao层
3.1 使用Mybatis的分页插件PageHelper, dao只需要查询全部需要的数据,后面会自动对查询语句进行分页
@Select("select o.*,p.id pid,p.productnum,p.productname,p.cityname," +
"p.productprice" +
" from orders o inner join product p on o.productId = p.id")
@Results({
@Result(id = true,property = "id",column = "id"),
/*2. 封装产品信息*/
@Result(property = "product.id",column = "pid"),
@Result(property = "product.productNum",column = "productnum"),
@Result(property = "product.productName",column = "productname"),
@Result(property = "product.cityName",column = "cityname"),
@Result(property = "product.productPrice",column = "productprice")
})
public List<Order> findAll();
4.分页(二)service
关键点
4.1PageInfo 封装分页参数,pagehelper提供
4.2分页查询:PageHelper.startPage((参数1)当前页,(参数2))页面每页显示数据数量)
//接口方法
PageInfo<Order> findByPage(int pageNum,int pageSize);
//实现类OderServiceImpl
public PageInfo<Order> findByPage(int pageNum, int pageSize) {
PageHelper.startPage(pageNum,pageSize);
List<Order> list = orderDao.findAll();
return new PageInfo<Order>(list);
}
测试类
@Test
public void test(){
//List<Order> list = orderService.findAll();
//List<Order> list = orderDao.find();
PageInfo<Order> pageInfo = orderService.findByPage(1, 2);
System.out.println(pageInfo);
}
由PageHelper自动生成的分页sql
SELECT TMP_PAGE.*, ROWNUM ROW_ID FROM
( select o.*,p.id pid,p.productnum,p.productname,p.cityname,p.productprice from orders o inner join product p on o.productId = p.id ) TMP_PAGE
WHERE ROWNUM <= ?
查询结果
PageInfo{pageNum=1, pageSize=2, size=2, startRow=1, endRow=2, total=50, pages=25, list=Page{count=true, pageNum=1, pageSize=2, startRow=0, endRow=2, total=50, pages=25, reasonable=true, pageSizeZero=false}, prePage=0, nextPage=2, isFirstPage=true, isLastPage=false, hasPreviousPage=false, hasNextPage=true, navigatePages=8, navigateFirstPage=1, navigateLastPage=8, navigatepageNums=[1, 2, 3, 4, 5, 6, 7, 8]}
总结
PageHelper只支持Mybatis框架的使用,使用的前提是添加正确的依赖和配置文件的正确配置,
查询数据库时只需要查询需要分页的所有数据(findAll),分页的sql不需要自己写,PageHelper会
自动根据配置文件中参数的数据类型生成对应的分页sql语句,在Service中需要使用PageHelper.startPage((参数1)当前页,(参数2))方法即可,其他分页所需要的数据例如数据库表中的数据、数据总数、总页数等PageHelper会自动保存。