添加依赖:
<!-- pagehelper分页模块 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.2</version>
</dependency>
pagehelper配置:
#分页插件配置
pagehelper:
helperDialect: mysql
reasonable: true
supportMethodsArguments: true
params: count=countSql
returnPageInfo: check
代码实现:
PageHelper.startPage(pageNum, pageSize);
List<User> user= dpmMapper.queryUserList();
Page<User> dpmPage = PageUtils.page(user);
public static <E> Page<E> startPage(int pageNum, int pageSize, boolean count, Boolean reasonable, Boolean pageSizeZero) {
Page<E> page = new Page(pageNum, pageSize, count);
page.setReasonable(reasonable);
page.setPageSizeZero(pageSizeZero);
Page<E> oldPage = getLocalPage();
if (oldPage != null && oldPage.isOrderByOnly()) {
page.setOrderBy(oldPage.getOrderBy());
}
setLocalPage(page);
return page;
}
public T get() {
Thread t = Thread.currentThread();
ThreadLocalMap map = getMap(t);
if (map != null) {
ThreadLocalMap.Entry e = map.getEntry(this);
if (e != null) {
@SuppressWarnings("unchecked")
T result = (T)e.value;
return result;
}
}
return setInitialValue();
}
PageHelper将参数保存到page对象中,接着将page的副本存放入ThreadLoacl中,这样可以保证分页的时候,参数互不影响,接着利用了mybatis提供的拦截器,取得ThreadLocal的值,重新拼装分页SQL,完成分页
public class PageUtils<T> implements Serializable {
private static final long serialVersionUID = 7381468955316253104L;
public static <T> Page<T> page(List<T> list){
Page<T> page = new Page<T>(list);
return page;
}
}
public class Page<T> implements Serializable {
private static final long serialVersionUID = 6094186219831724663L;
private List<T> content = new ArrayList<>(); //对象记录结果集
private long totalPages = 0; //总页数
private long totalElements; //总记录数
private int number; //当前页
private int size; //每页显示记录数
private int numberOfElements; //每页显示实际记录数
public Page(List<T> temp) {
com.github.pagehelper.Page<T> result = (com.github.pagehelper.Page<T>) temp;
if(result != null && result.size() > 0){
this.content = result.getResult();
this.totalPages = result.getPages();
this.totalElements = result.getTotal();
this.number = result.getPageNum();
this.size = result.getPageSize();
this.numberOfElements = this.content.size();
}
}
public Page() {
super();
}
}