SpringBoot整合分页插件PageHelper

2023-03-25 13:24:41 浏览数 (1)

在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

0 人点赞