本文由黑壳网原创
本文来源 mybaits 分页插件 pageHelper5.0.2~黑壳网
###壳叔搞笑一刻
一个老帽儿从未乘过电梯。
这天,他来到一家饭店,站在电梯门口看见一位老太太进了电梯,过了一会儿,电梯门又打开了,出来了一位年轻漂亮的姑娘,他惊喜过望地想:“哇,要是把我老婆带来就好了。”
如果你在找 Mybatis 的分页插件,那么 PageHelper 一定会是你的首选。这一定会是使用最方便的分页插件。这个插件它支持任何复杂的单表,多表分页。
今天会详细介绍 pageHelper 的 5.0 的使用
目前该插件,支持的数据库有
Oracle
Mysql
MariaDB
SQLite
Hsqldb
PostgreSQL
DB2
SqlServer(2005,2008)
Informix
H2
SqlServer2012
Derby
使用 PageHelper 你只需要在 classpath 中包含 pagehelper-x.x.x.jar 和 jsqlparser-0.9.5.jar。
如果你使用 Maven,你只需要在 pom.xml 中添加下面的依赖:
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.0.2</version>
</dependency>
与分页插件 PageHelper 5.0.0 同时发布的还有 pagehelper-spring-boot-starter。
如果你使用 Spring Boot,你只需要在 pom.xml 中添加下面的依赖:
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.0.0</version>
</dependency>
有关 pagehelper-spring-boot-starter 的用法可以参考集成示例 MyBatis-Spring-Boot
接着,在 spring-mybatis.xml 中是这样配置:
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 数据库连接池 -->
<property name="dataSource" ref="dataSource" />
<!-- 加载mybatis的全局配置文件 -->
<property name="mapperLocations">
<array>
<value>classpath:mapping/*.xml</value>
</array>
</property>
<!-- <property name="configLocation" value="classpath:sqlMapConfig.xml" /> -->
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties">
<value>
helperDialect=mysql
</value>
</property>
</bean>
</array>
</property>
</bean>
配置结束后,进入正题,创建一个查询语句,用了 pageHelper 查询语句与之前的一样。
select
<include refid="product"></include>
from product
where 1 = 1
查询一个 product 的表
/**
* 产品管理界面
*
* @param request
* @param model
* @return
*/
@RequestMapping(value = "productManage")
private String productManage(HttpServletRequest request, Model model, ProductDetail productDetail,
@RequestParam(required = true, defaultValue = "1") Integer page,
@RequestParam(required = false, defaultValue = "10") Integer pageSize) {
PageHelper.startPage(page, pageSize);
List<ProductDetail> productDetails = productService.getProductManage(productDetail);
PageInfo<ProductDetail> p = new PageInfo<ProductDetail>(productDetails);
/**
* 返回产品查询信息
*/
model.addAttribute("productDetail", productDetail);
/**
* 返回产品信息集合
*/
model.addAttribute("productDetails", productDetails);
/**
* 分页配置信息返回
*/
model.addAttribute("page", p);
return "manage/product/productManage";
}
可以看到,方法里有两个参数,前面也说了,这是一个 demo,仅仅只是一个非常简单的分页效果。
PageHelper.startPage(page, pageSize);
这段代码表示,程序开始分页了,page 默认值是 1,pageSize 默认是 10,意思是从第 1 页开始,每页显示 10 条记录。
PageInfo 这个类是插件里的类,这个类里面的属性还是值得看一看:
//当前页
private int pageNum;
//每页的数量
private int pageSize;
//当前页的数量
private int size;
//由于startRow和endRow不常用,这里说个具体的用法
//可以在页面中"显示startRow到endRow 共size条数据"
//当前页面第一个元素在数据库中的行号
private int startRow;
//当前页面最后一个元素在数据库中的行号
private int endRow;
//总记录数
private long total;
//总页数
private int pages;
//结果集
private List<T> list;
//前一页
private int prePage;
//下一页
private int nextPage;
//是否为第一页
private boolean isFirstPage = false;
//是否为最后一页
private boolean isLastPage = false;
//是否有前一页
private boolean hasPreviousPage = false;
//是否有下一页
private boolean hasNextPage = false;
//导航页码数
private int navigatePages;
//所有导航页号
private int[] navigatepageNums;
//导航条上的第一页
private int navigateFirstPage;
//导航条上的最后一页
private int navigateLastPage;
PageInfo p=new PageInfo(list);
然后 mv.addObject("page", p);
这样在页面中就可以通过 ${page.nextPage}翻到下一页,
${page.prePage}翻到上一页,
ok 是不是简单了许多,热爱编程,学习不停止!
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于