最近新项目使用springboot+spring+mybatis完成分页使用PageHelper笔记。
1.因为项目是maven进行管理的,所以:第一步就是在pom.xml文件中引入pagehelper分页插件。
<!--mybatis分页插件--> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.2.3</version> </dependency>
2.项目运行成功 ,调用数据库数据前加一句代码即可实现分页 :PageHelper.startPage(pages, rows)
分页成功后,实际返回的结果list类型是Page<E>,如果想取出分页信息,有两种方法:
需要强制转换为Page<E>,或者使用PageInfo类(下面的例子有介绍)
@GetMapping("/findMatter/getAll")
public Map<String, Object> getMatterAll(String pages, String rows) {
String pageS = pages == null || pages.trim().length() == 0 ? "1":pages;
String pageSizes = rows == null || rows.trim().length() == 0 ? "10":rows;
Integer page = Integer.parseInt(pageS);
Integer pageSize = Integer.parseInt(pageSizes);
//设置分页的起始码以及页面大小
Page Pagehelper = PageHelper.startPage(page, pageSize);
Page list = (Page) matterService.findAll();
Map<String,Object> map = new HashMap<>();
map.put("total",list.getTotal());
map.put("rows",list.getResult());
return map;
}
Page<E>:需要详细了解可以查下每个属性的含义。
public class Page<E> extends ArrayList<E> implements Closeable {
private static final long serialVersionUID = 1L;
private int pageNum;
private int pageSize;
private int startRow;
private int endRow;
private long total;
private int pages;
private boolean count;
private Boolean reasonable;
private Boolean pageSizeZero;
private String countColumn;
private String orderBy;
private boolean orderByOnly;
方法二:使用PageInfo类
public PageInfo<Matter> getMatterAll(String pages, String rows) {
String pageS = pages == null || pages.trim().length() == 0 ? "1":pages;
String pageSizes = rows == null || rows.trim().length() == 0 ? "10":rows;
Integer page = Integer.parseInt(pageS);
Integer pageSize = Integer.parseInt(pageSizes);
//设置分页的起始码以及页面大小
PageHelper.startPage(page, pageSize);
List<Matter> docs = matterService.getMatterAll();
PageInfo<Matter> pageInfo = new PageInfo<>();
return pageInfo;
}
pageInfo:需要详细了解可以查下每个属性的含义。
/**
* 页码,从1开始
*/
private int pageNum;
/**
* 页面大小
*/
private int pageSize;
/**
* 起始行
*/
private int startRow;
/**
* 末行
*/
private int endRow;
/**
* 总数
*/
private long total;
/**
* 总页数
*/
private int pages;
/**
* 包含count查询
*/
private boolean count = true;
/**
* count信号,3种情况,null的时候执行默认BoundSql,true的时候执行count,false执行分页
*/
private Boolean countSignal;
/**
* 排序
*/
private String orderBy;
/**
* 只增加排序
*/
private boolean orderByOnly;
/**
* 分页合理化
*/
private Boolean reasonable;
/**
* 当设置为true的时候,如果pagesize设置为0(或RowBounds的limit=0),就不执行分页,返回全部结果
*/
private Boolean pageSizeZero;
注意:PageHelper只对紧跟着的第一个SQL语句起作用
//获取第1页,10条内容,默认查询总数count
PageHelper.startPage(1, 10);
//紧跟着的第一个select方法会被分页
List<Country> list = countryMapper.selectIf(1);
//后面的不会被分页,除非再次调用PageHelper.startPage
List<Country> list2 = countryMapper.selectIf(null);
//list1
assertEquals(2, list.get(0).getId());
assertEquals(10, list.size());
//分页时,实际返回的结果list类型是Page<E>,如果想取出分页信息,需要强制转换为Page<E>,
//或者使用PageInfo类(下面的例子有介绍)
assertEquals(182, ((Page) list).getTotal());
//list2
assertEquals(1, list2.get(0).getId());
assertEquals(182, list2.size());