前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringBoot整合分页插件PageHelper

SpringBoot整合分页插件PageHelper

原创
作者头像
zpzp6
修改2023-03-25 13:24:41
1.2K0
修改2023-03-25 13:24:41
举报
文章被收录于专栏:开发工具/IDEA开发工具/IDEA

在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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档