SpringBoot集成pagehelper依赖:
pagehelper有两个依赖,分别说一下区别:
第一种:
<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.2</version>
</dependency>
使用这个依赖需要我们手动配置拦截器:
package com.zlp.cps.config;
import com.github.pagehelper.PageInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.Properties;
/**
* pagehelper拦截器
*/
@Configuration
public class PageHelperConfig {
@Bean
public PageInterceptor pageHelper() {
// 注意这里使用的 PageInterceptor
PageInterceptor pageInterceptor = new PageInterceptor();
Properties properties = new Properties();
properties.setProperty("offsetAsPageNum","true");
properties.setProperty("rowBoundsWithCount","true");
properties.setProperty("reasonable","true");
properties.setProperty("helperDialect", "mysql");
properties.setProperty("supportMethodsArguments","true");
properties.setProperty("params","count=countSql");
pageInterceptor.setProperties(properties);
return pageInterceptor;
}
}
这里有个小坑:之前注册pagehelper
拦截器都是用的PageHelper
,新版已经改了,官网原话:
特别注意,新版拦截器是 com.github.pagehelper.PageInterceptor
。 com.github.pagehelper.PageHelper
现在是一个特殊的 dialect
实现类,是分页插件的默认实现类,提供了和以前相同的用法。(https://pagehelper.github.io/docs/howtouse/)
这种还得手动配置,一般不推荐,企业开发一般也不会用。
第二种:
<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper-spring-boot-starter -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.4.1</version>
</dependency>
可以看一下导入两个依赖的区别:
可以看出导入第二种依赖是多了两个依赖包,这两个依赖包就是自动配置拦截器,推荐使用。
pagehelper使用:
使用比较简单,直接看例子:
public BaseResponse getTbGoods(ProgramReq req) {
Integer materialTypeId = req.getMaterialTypeId();
int pageNum = Integer.parseInt(String.valueOf(req.getPageNum()));
int pageSize = Integer.parseInt(String.valueOf(req.getPageSize()));
// 第一步 开启分页
PageHelper.startPage(pageNum, pageSize);
// 第二步 根据实际业务sql语句查询
List<TbCpsGood> tbCpsGoodList = wmCpsMapper.selectTbShopByMaterialTypeId(materialTypeId);
if (ListUtil.isEmpty(tbCpsGoodList)) {
return BaseResponse.successRes(GlobalEnum.RESPONSE_NO_DATA);
}
// 第三步 通过PageInfo对象可以获取分页后的信息 常用的如下:
PageInfo<TbCpsGood> tbCpsGoodPageInfo = new PageInfo<>(tbCpsGoodList);
int pages = tbCpsGoodPageInfo.getPages(); // 总页数
long total = tbCpsGoodPageInfo.getTotal(); // 总数
int curPageNum = tbCpsGoodPageInfo.getPageNum(); // 当前页
int curPageSize = tbCpsGoodPageInfo.getPageSize(); // 当前页大小
BaseResponse baseResponse = new BaseResponse();
baseResponse.setPageNum(curPageNum);
baseResponse.setPageSize(curPageSize);
baseResponse.setTotal(total);
baseResponse.setPages(pages);
baseResponse.setData(tbCpsGoodList);
return baseResponse;
}
三步解决分页问题
看到这里应该能快速上手了,有什么问题可以留言,也可以私聊,后续可以根据需要更新一篇pagehelper分页原理。