springboot整合PageHelper

介绍:

PageHelper是mybatis框架上的一款分页插件。通过它友好的api设计,可省去写count,分页sql嵌套的繁琐工作。同时插件内部兼容不同数据库间(mysql、Oracle等)的分页实现。开发者只需关注具体业务sql,其他的统计封装交给PageHelper插件动态处理。

作为java后端开发者,这是一款必不可少的基础组件,大大减少了手动写分页列表查询的工作量。

参考文档:PageHelper 分页插件详解 - 掘金 (juejin.cn)

1. 引入依赖(pom.xml)

        <!--  pagehelper分页插件  -->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.4.2</version>
        </dependency>

2. 在项目添加配置

@Configuration
public class PageHelperConfig {
    @Bean
    public PageHelper pageHelper(){
        PageHelper pageHelper = new PageHelper();
        Properties p = new Properties();
        //1.offsetAsPageNum:设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用.
        p.setProperty("offsetAsPageNum", "true");
        //2.rowBoundsWithCount:设置为true时,使用RowBounds分页会进行count查询.
        p.setProperty("rowBoundsWithCount", "true");
        //3.reasonable:启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页。
        p.setProperty("reasonable", "true");
        pageHelper.setProperties(p);
        return pageHelper;
    }
}

2.1 service层

@Service
public class EmployeeService {

     @Autowired
     EmployeeMapper employeeMapper;
     
     public List<Employee> getAll(){
           EmployeeExample example = new EmployeeExample();
           example.setOrderByClause("emp_id asc");
           return employeeMapper.selectByExampleWithDept(example);
     }
}

2.2 Controller层

   // 查询所有 Employee , 分页查询
    @RequestMapping("/emps")
    public String getEmps( @RequestParam(value = "pn", defaultValue = "1") Integer pn, Model model) {
        System.out.println("请求参数 pn = " + pn);
        // 分页查询, 可以引入 PageHelper 分页插件. 在查询之前, 只需要调用 startPage() 方法即可.
        // 参数1: 查询开始的页码 . 参数2:每页的大小.
        PageHelper.startPage(pn, 5);
        // startPage() 方法后面紧跟的这个查询就是一个分页查询.
        List<Employee> employees = employeeService.getAll();
        // 使用 pageInfo 包装查询后的结果, 封装了十分详细的分页信息, 包括有查询出来的数据, 传入连续显示的页数, .....
        // 参数1: 要显示的数据. 参数2: 页码下标连续显示几页.
        PageInfo<Employee> page = new PageInfo<>(employees, 5);
        model.addAttribute("pageInfo", page);
        return "list";
    }

3. 项目中的使用

3.1 application.yml 相关配置

# 分页配置
pagehelper:
  helper-dialect: mysql	#使用的数据库. mysql, oracle, sqlite
  reasonable: true #开启优化,在分页页码结果没有数据的时候,会显示有数据的页码数据,也就是当当前页<1时,返回第 1 页, 当当前页 > 最大页时, 返回最后一页的数据.
  support-methods-arguments: true #是否支持接口参数来传递分页参数,默认false
  pageSizeZero: false #表示当 pageSize=0 时返回所有
  params: count=countSql

3.2 Controller

    /**
     * 分页获取任务执行结果
     * @return List<TaskResultVo>
     */
    @GetMapping(value = "page/{pageSize}/{pageNum}")
    public Result page(@PathVariable(value = "pageSize") Integer pageSize,
                       @PathVariable(value = "pageNum") Integer pageNum) {
        PageHelper.startPage(pageNum,pageSize);
        List<TaskResult> taskResultList = taskResultService.list();
        PageInfo<TaskResult> page = new PageInfo<>(taskResultList, 5);
        return new Result(true,200,"查询成功", page);
    }

3.3 Service

    /**
     * 获取所有的任务执行结果
     * @return List<TaskResult>
     */
    public List<TaskResult> list() {
        TaskResultExample taskResultExample = new TaskResultExample();
        taskResultExample.setOrderByClause("id");
        return taskResultMapper.selectByExample(taskResultExample);
    }

4. 演示效果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值