MyBatis 分页插件 PageHelper:
前期搭建好一个ssm项目: 略
1. 引入分页插件
1.1你可以从下面的地址中下载最新版本的 jar 包:(2选1+1)
https://oss.sonatype.org/content/repositories/releases/com/github/pagehelper/pagehelper/
http://repo1.maven.org/maven2/com/github/pagehelper/pagehelper/
由于使用了sql 解析工具,你还需要下载 jsqlparser.jar:
1.2或者使用 Maven
在 pom.xml 中添加如下依赖:
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>最新版本</version>
</dependency>
2. 配置拦截器插件
2.1. 在 MyBatis 配置 xml 中配置拦截器插件
<!-- 配置分页拦截器插件-->
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<!--分页参数合理化-->
<property name="reasonable" value="true"/>
</plugin>
</plugins>
3.使用用例:
(这里介绍其中一种pageInfo的用法)
@RequestMapping("/retailerList.do") //pn初始值为1
public String retailerList(@RequestParam(value = "pn",defaultValue = "1")Integer pn,
Model model){
//引入PageHelper分页插件
//在查询 之前只需要调用 传入页码以及每页大小
PageHelper.startPage(pn,5); //从第pn页开始查,每页有五条数据
//startPage后面紧跟的查询就是分页查询
List<Retailer> retailerList = retailerService.find(map);
// 使用PageInfo包装查询后的结果 只需要将pageInfo交给页面就行了
//分装了详细的页面信息 包括我们查询出来的数据 //连续显示一页
PageInfo page = new PageInfo(retailerList,1);
//传给页面
model.addAttribute("pageInfo",page);
return "retailerHome"; //转向首页
}
上述代码解释:
@RequestParam(value = "pn",defaultValue = "1")Integer pn //pn为第几页 默认为第一页
PageHelper.startPage(pn,5); //从第pn页开始查,每页有五条数据
重点: //startPage后面紧跟的查询就是分页查询 ist<Retailer> retailerList = retailerService.find(map); //find的方法是我定义的查找所有用户的PageInfo page = new PageInfo(retailerList,1); //分装了详细的页面信息 包括我们查询出来的数据 连续显示1页model.addAttribute("pageInfo",page); //pageInfo里面包含了我们的所有数据
pageInfo.list : 就是我们从数据库查到的数据
使用PageInfo
的用法:
//获取第1页,10条内容,默认查询总数count
PageHelper.startPage(1, 10);
List<Country> list = countryMapper.selectAll();
//用PageInfo对结果进行包装
PageInfo page = new PageInfo(list);
//测试PageInfo全部属性
//PageInfo包含了非常全面的分页属性
assertEquals(1, page.getPageNum());
assertEquals(10, page.getPageSize());
assertEquals(1, page.getStartRow());
assertEquals(10, page.getEndRow());
assertEquals(183, page.getTotal());
assertEquals(19, page.getPages());
assertEquals(1, page.getFirstPage());
assertEquals(8, page.getLastPage());
assertEquals(true, page.isFirstPage());
assertEquals(false, page.isLastPage());
assertEquals(false, page.isHasPreviousPage());
assertEquals(true, page.isHasNextPage());
3.1在jsp中具体用法:
${pageInfo.list} //从数据库中查到的数据
${pageInfo.pageNum} //当前在第几页
下面的都是pageInfo给我们提供的:
//当前页
private int pageNum;
//每页的数量
private int pageSize;
//当前页的数量
private int size;
//由于startRow和endRow不常用,这里说个具体的用法
//可以在页面中"显示startRow到endRow 共size条数据"
//当前页面第一个元素在数据库中的行号
private int startRow;
//当前页面最后一个元素在数据库中的行号
private int endRow;
//总页数
private int pages;
//前一页
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;
更多用法请参照:
pageHelper中文文档:
https://pagehelper.github.io/docs/howtouse/