在springboot中使用PageHelper插件有两种较为相似的方式,接下来我就将这两种方式进行总结。官方使用说明
方式一:使用原生的PageHelper
1.在pom.xml中引入依赖
代码语言:javascript复制 <dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>4.1.3</version>
</dependency>
2.在项目里面添加配置
代码语言:javascript复制@Configuration
public class MybatisConfig {
@Bean
public PageHelper pageHelper() {
PageHelper pageHelper = new PageHelper();
Properties p = new Properties();
p.setProperty("dialect", "Mysql");
p.setProperty("offsetAsPageNum", "true");
p.setProperty("rowBoundsWithCount", "true");
pageHelper.setProperties(p);
return pageHelper;
}
}
方式二:使用PageHelper的starter
1.在pom.xml中引入依赖
代码语言:javascript复制 <dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.10</version>
</dependency>
2.在application.properties或者application.yml格式配置pagehelper的属性
代码语言:javascript复制application.properties
#pagehelper分页插件配置
pagehelper.helper-dialect=mysql
pagehelper.reasonable=true
pagehelper.support-methods-arguments=true
pagehelper.params=count=countSql
application.yml
pagehelper:
helper-dialect: mysql
reasonable: true
support-methods-arguments: true
最后使用:
直接在controller层分页方法中使用
代码语言:javascript复制public PageInfo<T> getPageById(@RequestParam("sectionId") String sectionId,
@RequestParam("pageNum" Integer pageNum,@RequestParam("pageSize" Integer pageSize)) {
PageInfo<T> info= PageHelper.orderBy(xxx ASC/DESC).startPage(pageNum, pageSize).doSelectPage(() -> {
this.xxxService.getPagedBySectionId(sectionId);
});
return info;
}
其他调用方式参考:
第一种、RowBounds方式的调用
代码语言:javascript复制List<Country> list = sqlSession.selectList("x.y.selectIf", null, new RowBounds(0, 10));
第二种、Mapper接口方式的调用,推荐这种使用方式。
代码语言:javascript复制PageHelper.startPage(1, 10);
List<Country> list = countryMapper.selectIf(1);
第三种、Mapper接口方式的调用,推荐这种使用方式。
代码语言:javascript复制PageHelper.offsetPage(1, 10);
List<Country> list = countryMapper.selectIf(1);
第四种、参数方法调用 存在以下 Mapper 接口方法,你不需要在 xml 处理后两个参数
代码语言:javascript复制public interface CountryMapper {
List<Country> selectByPageNumSize(
@Param("user") User user,
@Param("pageNum") int pageNum,
@Param("pageSize") int pageSize);
}
//配置supportMethodsArguments=true
//在代码中直接调用:
List<Country> list = countryMapper.selectByPageNumSize(user, 1, 10);
//第五种、参数对象
代码语言:javascript复制//如果 pageNum 和 pageSize 存在于 User 对象中,只要参数有值,也会被分页
//有如下 User 对象
public class User {
//其他fields
//下面两个参数名和 params 配置的名字一致
private Integer pageNum;
private Integer pageSize;
}
//存在以下 Mapper 接口方法,你不需要在 xml 处理后两个参数
代码语言:javascript复制public interface CountryMapper {
List<Country> selectByPageNumSize(User user);
}
//当 user 中的 pageNum!= null && pageSize!= null 时,会自动分页
代码语言:javascript复制List<Country> list = countryMapper.selectByPageNumSize(user);
//第六种、ISelect 接口方式
代码语言:javascript复制//jdk6,7用法,创建接口
Page<Country> page = PageHelper.startPage(1, 10).doSelectPage(new ISelect() {
@Override
public void doSelect() {
countryMapper.selectGroupBy();
}
});
jdk8 lambda用法
代码语言:javascript复制Page<Country> page = PageHelper.startPage(1, 10).doSelectPage(()-> countryMapper.selectGroupBy());
//也可以直接返回PageInfo,注意doSelectPageInfo方法和doSelectPage
pageInfo = PageHelper.startPage(1, 10).doSelectPageInfo(new ISelect() {
@Override
public void doSelect() {
countryMapper.selectGroupBy();
}
});
对应的lambda用法
代码语言:javascript复制pageInfo = PageHelper.startPage(1, 10).doSelectPageInfo(() -> countryMapper.selectGroupBy());
//count查询,返回一个查询语句的count数
long total = PageHelper.count(new ISelect() {
@Override
public void doSelect() {
countryMapper.selectLike(country);
}
});
//lambda
total = PageHelper.count(()->countryMapper.selectLike(country));
参考:https://blog.csdn.net/csdn_huzeliang/article/details/79350425