PageHelper是国人开发的一款极其简单的数据库分页插件。只要在Java代码里添加一行简单的分页就可以实现简单的分页。参考官方github文档。
com.github.pagehelper
pagehelper
5.1.2
helperDialect=mysql
reasonable=true
rowBoundsWithCount=true
supportMethodsArguments=true
params=count=countSql
autoRuntimeDialect=true
@Controller
@RequestMapping(value = "/test")
public class TestPageHelperController {
@Autowired
public InteriorAnalysisService interiorAnalysisService;
/**
* 在查询调用方法前声明分页信息(当前页,每页记录数)
*在查询调用方法对查询结果进行包装成PageInfo对象,也可以是定连续显示的页数,这也是常用功能。
*注意:都是与查询方法紧挨着的,不要中间夹杂其它无关语句
*
*/
@RequestMapping(value = "/getAutoBaseDayReportV4",method = RequestMethod.POST)
@ResponseBody
public Object getAutoBaseDayReportV4(@RequestParam(required = false,defaultValue = "1",value = "pn")Integer pn,
Map map){
//引入分页查询,使用PageHelper分页功能
//在查询之前传入当前页,然后多少记录
PageHelper.startPage(pn,5);
//startPage后紧跟的这个查询就是分页查询
List emps = interiorAnalysisService.getAll();
//使用PageInfo包装查询结果,只需要将pageInfo交给页面就可以
PageInfo pageInfo = new PageInfo<>(emps,5);
//pageINfo封装了分页的详细信息,也可以指定连续显示的页数
map.put("pageInfo",pageInfo);
return emps;
}
}
前端页面调用json接口,即可返回json格式的数据,前端如果传输的是{},则发现从数据返回了5个AutoBaseDayReportV4的json格式的数据。使用非常方便,对代码的侵入性小
PageHelper的源码如下:
/**
* 获取任意查询方法的count总数
*
* @param select
* @return
*/
public static long count(ISelect select) {
Page> page = startPage(1, -1, true);
select.doSelect();
return page.getTotal();
}
/**
* 开始分页
*
* @param pageNum 页码
* @param pageSize 每页显示数量
*/
public static Page startPage(int pageNum, int pageSize) {
return startPage(pageNum, pageSize, true);
}
/**
* 开始分页
*
* @param pageNum 页码
* @param pageSize 每页显示数量
* @param count 是否进行count查询
*/
public static Page startPage(int pageNum, int pageSize, boolean count) {
return startPage(pageNum, pageSize, count, null);
}
/**
* 开始分页
*
* @param pageNum 页码
* @param pageSize 每页显示数量
* @param orderBy 排序
*/
public static Page startPage(int pageNum, int pageSize, String orderBy) {
Page page = startPage(pageNum, pageSize);
page.setOrderBy(orderBy);
return page;
}
/**
* 开始分页
*
* @param offset 页码
* @param limit 每页显示数量
*/
public static Page offsetPage(int offset, int limit) {
return offsetPage(offset, limit, true);
}
/**
* 开始分页
*
* @param offset 页码
* @param limit 每页显示数量
* @param count 是否进行count查询
*/
public static Page offsetPage(int offset, int limit, boolean count) {
Page page = new Page(new int[]{offset, limit}, count);
//当已经执行过orderBy的时候
Page oldPage = SqlUtil.getLocalPage();
if (oldPage != null && oldPage.isOrderByOnly()) {
page.setOrderBy(oldPage.getOrderBy());
}
SqlUtil.setLocalPage(page);
return page;
}
/**
* 开始分页
*
* @param offset 页码
* @param limit 每页显示数量
* @param orderBy 排序
*/
public static Page offsetPage(int offset, int limit, String orderBy) {
Page page = offsetPage(offset, limit);
page.setOrderBy(orderBy);
return page;
}
/**
* 开始分页
*
* @param pageNum 页码
* @param pageSize 每页显示数量
* @param count 是否进行count查询
* @param reasonable 分页合理化,null时用默认配置
*/
public static Page startPage(int pageNum, int pageSize, boolean count, Boolean reasonable) {
return startPage(pageNum, pageSize, count, reasonable, null);
}
/**
* 开始分页
*
* @param pageNum 页码
* @param pageSize 每页显示数量
* @param count 是否进行count查询
* @param reasonable 分页合理化,null时用默认配置
* @param pageSizeZero true且pageSize=0时返回全部结果,false时分页,null时用默认配置
*/
public static Page startPage(int pageNum, int pageSize, boolean count, Boolean reasonable, Boolean pageSizeZero) {
Page page = new Page(pageNum, pageSize, count);
page.setReasonable(reasonable);
page.setPageSizeZero(pageSizeZero);
//当已经执行过orderBy的时候
Page oldPage = SqlUtil.getLocalPage();
if (oldPage != null && oldPage.isOrderByOnly()) {
page.setOrderBy(oldPage.getOrderBy());
}
SqlUtil.setLocalPage(page);
return page;
}
/**
* 开始分页
*
* @param params
*/
public static Page startPage(Object params) {
Page page = SqlUtil.getPageFromObject(params);
//当已经执行过orderBy的时候
Page oldPage = SqlUtil.getLocalPage();
if (oldPage != null && oldPage.isOrderByOnly()) {
page.setOrderBy(oldPage.getOrderBy());
}
SqlUtil.setLocalPage(page);
return page;
}
/**
* 排序
*
* @param orderBy
*/
public static void orderBy(String orderBy) {
Page> page = SqlUtil.getLocalPage();
if (page != null) {
page.setOrderBy(orderBy);
} else {
page = new Page();
page.setOrderBy(orderBy);
page.setOrderByOnly(true);
SqlUtil.setLocalPage(page);
}
}
/**
* 手动清空分页数据
*/
public static void clearPage(){
SqlUtil.clearLocalPage();
}
当时引入PageHelper是没注意我的Spring 版本是3.1 。去作者的github才发现配置是不同的。另外,对于mybatis的配置文件的配置项的顺序有一定要求,否则会报错,官方github地址请参考:PageHelper