分页查询与SpringBoot3.x的pageHelper配置问题

pageHelper配置:

SpringBoot 通常是支持 PageHelper 分页插件的。但是,在 SpringBoot 3.* 系列的版本中,引入第三方 jar 包后,要想使用功能还必须加配置才行(开启分页插件生效的配置),分页插件不会自动生效。而在 SpringBoot 2.* 系列版本中,引入 PageHelper 插件后可以自动生效

首先在pom中添加pageHelper依赖:
 

<!--        pageHelper插件依赖-->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.0.3</version>
        </dependency>

这里使用的是Springboot3.2.4,只能配置pageHelper依赖。

spring2.x可以配置  pagehelper-spring-boot-starter  依赖,如果仍然无法正常运行的话,可以切换版本号尝试一下。

或者可能需要在 application.properties 或 application.yml 文件中添加一些配置,例如:

#pagehelper分页插件配置
pagehelper.helper-dialect=mysql
pagehelper.reasonable=true
pagehelper.support-methods-arguments=true
pagehelper.params=count=countSql

这些配置需要根据实际情况进行调整。

springboot 3.2.4除了需要在pom文件中创建pagehelper依赖之外,还需要手动配置一个拦截器:

放在java目录下:

package edu.wust.pageHelperUtil;
import com.github.pagehelper.PageInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.Properties;

@Configuration
public class PageHelperConfig {
    @Bean
    public PageInterceptor pageHelper() {
        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.startPage(page,pageSize);

这一句代码,必须放在需要分页的查询语句之前,否则会分页不生效。

错误情况:

正常情况:

 

相关链接:

https://github.com/pagehelper/Mybatis-PageHelper/issues/748

https://zhuanlan.zhihu.com/p/453238791

Maven Repository: com.github.pagehelper » pagehelper (mvnrepository.com)

 

分页查询:

1.常规分页:

分页查询封装类:

package edu.wust.pojo;


import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

//分页查询封装类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PageBean {

    private Long total;
    private List rows;   //结果列表
}

cotroller类:

package edu.wust.controller;

import edu.wust.pojo.PageBean;
import edu.wust.pojo.Result;
import edu.wust.service.EmpService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@Slf4j
/*
  员工管理Controller
 */

@RestController
public class EmpController {
    @Autowired
    private EmpService empService;

    @GetMapping("/emps")
    public Result page(@RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "10") Integer pageSize){
//        if(page==null) page=1;
//        if(pageSize==null) pageSize=10;
        log.info("分页查询,参数:{},{}",page,pageSize);

        //调用service进行分页查询
        PageBean pageBean=empService.page(page,pageSize);
        return Result.success(pageBean);
    }
}

这里的@RequestParam注解替代了后面的默认值

 

service接口:
 

package edu.wust.service;

import edu.wust.pojo.PageBean;
import org.springframework.stereotype.Service;

/**
 * 员工管理
 */
@Service
public interface EmpService {
    PageBean page(Integer page, Integer pageSize);
}

service实现类:
 

package edu.wust.service.impl;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import edu.wust.mapper.EmpMapper;
import edu.wust.pojo.Emp;
import edu.wust.pojo.PageBean;
import edu.wust.service.EmpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class EmpServiceImpl implements EmpService {
    @Autowired
    private EmpMapper empMapper;
    @Override
    public PageBean page(Integer page, Integer pageSize) {
        //获取总记录数
        Long count = empMapper.count();

        //获取分页查询的结果列表
        Integer start=(page-1)*pageSize;
        List<Emp> empList = empMapper.page(start, pageSize);

        //封装pageBean对象
        PageBean pageBean=new PageBean(count,empList);
        return pageBean;
    }
}  

 

Mapper数据操作接口:

package edu.wust.mapper;

import edu.wust.pojo.Emp;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * 员工管理
 */
@Mapper
public interface EmpMapper {

    //查询总记录数
    @Select("select count(*) from emp")
    public Long count();

    //分页
    @Select("select * from emp limit #{start},#{pageSize}")
    public List<Emp> page(Integer start,Integer pageSize);
    
}

为提高代码复用性,使用pageHelper插件进行分页:

2.插件分页:

配置完成之后,只需要修改service层的page方法:

    @Override
    public PageBean page(Integer page, Integer pageSize) {
        PageHelper.startPage(page,pageSize);
        List<Emp> empList = empMapper.list();
        Page<Emp> p=(Page<Emp>)empList;
        //封装pageBean对象
        PageBean pageBean=new PageBean(p.getTotal(),p.getResult());
        return pageBean;
    }

以及Mapper接口的数据层方法:

    @Select("select * from emp")
    public List<Emp> list();

  • 15
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值