SpringBoot使用PageHelper时pageSize=Size并且等于数据库总条数

在SprinBoot项目中需要使用分页功能,由于ORM使用的是Mybatis,所以这里我选择了PageHelper来完成分页操作,我的实现方式如下:

1. Entity层

首先是我操作的entity对象,这里为Role

在这里插入图片描述

2. mapper层

然后是mapper层的 RoleMapper.Impl以及RoleMapper.xml ,只需要全部查询的语句即可也就是Select * from xxx,这里因为我的语句因为要处理一些其他的问题,所以复杂了些。

Rolemapper.Impl:

// 该方法就是查询所有所需对象方法,因为我有一些其他的需求所以复杂了些,正常一般不需要传参
public List<Role> getAllRole(@Param("exchangeRage") double exchangeRage);

RoleMapper.xml:

<select id="getAllRole" resultMap="rolemap">
   select id, name, money * #{exchangeRage} as money, version, start_date, end_date from role
</select>

3. Service层

public PageInfo<Role> getPageRole(int pageNumber, int pageSize){
    //设置分页
    PageHelper.startPage(pageNumber, pageSize);
    List<Role> pageRole = roleMapper.getAllRole(tool.getExchangeRage());
    return new PageInfo<>(pageRole);
}

这里需要注意,初始化PageHelper之后,也就是执行了PageHelper.startPage(pageNumber, pageSize);之后,下一行代码需要接上操作数据库的代码,否则会导致分页失效!

4. Controller层

@GetMapping("/getpagerole")
public PageInfo<Role> getPageRole(@RequestParam(value = "pageNumber", defaultValue = "1") int pagenumber, @RequestParam(value = "pageSize", defaultValue = "10") int pagesize){
    return roleService.getPageRole(pagenumber, pagesize);
}

5. 测试

启动项目,浏览器或者Postman,输入地址:http://localhost:8083/role/getpagerole?pageNumber=1&pageSize=5

注:这里的端口号每个人不同,SpringBoot默认是8080

结果如下:

在这里插入图片描述

发现pageSize=size=total,也就是数据库数据总条数,也就是说分页未完成,于是在网上找了一堆方法去处理,其中最符合我的问题情况的就是上面提到的,需要把数据库操作的mapper语句紧跟到PageHelper.StartPage之后,然而我本身就是这样写的。

最后试着换了一下较新的PageHelper版本,刷新maven,再次尝试,发现成功!

在这里插入图片描述

在这里插入图片描述

正常显示!!!

说白了,需要注意版本的问题,这里我的版本是:

SpringBoot:3.1.1

Mybatis:3.0.2

PageHelper:1.4.6

注意后面两个导maven包是导的xxx-spring-boot-starter

6. 帮助连接

SpringBoot:spring.io/projects/spring-boot/

PageHelper:MyBatis 分页插件 PageHelper

Maven仓库:Maven Repository: Search/Browse/Explore (mvnrepository.com)

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐