本文由黑壳网原创
本文来源mybaits 分页插件 pageHelper5.0.2~黑壳网
壳叔搞笑一刻
一个老帽儿从未乘过电梯。
这天,他来到一家饭店,站在电梯门口看见一位老太太进了电梯,过了一会儿,电梯门又打开了,出来了一位年轻漂亮的姑娘,他惊喜过望地想:“哇,要是把我老婆带来就好了。”
如果你在找Mybatis的分页插件,那么PageHelper一定会是你的首选。这一定会是使用最方便的分页插件。这个插件它支持任何复杂的单表,多表分页。
今天会详细介绍 pageHelper的5.0的使用
目前该插件,支持的数据库有
<ol ><li><p>Oracle</p></li><li><p> Mysql</p></li><li><p>MariaDB</p></li><li><p>SQLite</p></li><li><p> Hsqldb</p></li><li><p>PostgreSQL</p></li><li><p>DB2</p></li><li><p>SqlServer(2005,2008)</p></li><li><p>Informix</p></li><li><p>H2</p></li><li><p>SqlServer2012</p></li><li><p>Derby</p></li></ol>
<p>使用 PageHelper 你只需要在 classpath 中包含 <a data-cke-saved-href="http://repo1.maven.org/maven2/com/github/pagehelper/pagehelper/" href="http://repo1.maven.org/maven2/com/github/pagehelper/pagehelper/" target="_blank">pagehelper-x.x.x.jar</a> 和<a data-cke-saved-href="http://repo1.maven.org/maven2/com/github/jsqlparser/jsqlparser/0.9.5/" href="http://repo1.maven.org/maven2/com/github/jsqlparser/jsqlparser/0.9.5/" target="_blank"> jsqlparser-0.9.5.jar</a>。
如果你使用 Maven,你只需要在 pom.xml 中添加下面的依赖:</p>
<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 的用法可以参考集成示例 <a data-cke-saved-href="https://github.com/ykz200/MyBatis-Spring-Boot" href="https://github.com/ykz200/MyBatis-Spring-Boot" target="_blank">MyBatis-Spring-Boot</a>
接着,在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<CityList> p=new PageInfo<CityList>(list);
然后mv.addObject("page", p);
这样在页面中就可以通过${page.nextPage}翻到下一页,
${page.prePage}翻到上一页,
ok是不是简单了许多,热爱编程,学习不停止!