简单使用 PageHelper 实现分页查询功能

发布时间 2023-07-01 01:17:48作者: Himmelbleu

导入依赖

file:pom.xml
<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper-spring-boot-starter -->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.4.6</version>
</dependency>

mapper

在 Mapper.xml 写 Sql 语句时一定要注意不能给语句末尾处添加 ;,否则 PageHelper 拼接的 sql 就是错误的。

file:resources/mappers/BaseMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.mappers.BaseMapper">

    <select id="queryAll">
        SELECT * FROM temhu
        ORDER BY id DESC
    </select>

</mapper>
file:src/mappers/BaseMapper.java
@Mapper
public interface BaseMapper {
    List<Temphu> queryAll(Map<String, Object> map);
}

pojos

file:src/pojos/TemphuPage.java
@Data
@NoArgsConstructor
@AllArgsConstructor
public class TemphuPage {

    private int pageSize;
    private long total;
    private List<Temphu> list;

}

service

file:src/services/BaseService.java
@Service
public class BaseService {
    private final BaseMapper mapper;

    public BaseService(BaseMapper mapper) {
        this.mapper = mapper;
    }

    public TemphuPage queryAll(Map<String, Object> map) {
        Page<?> page = PageHelper.startPage((Integer) map.get("pageNum"), (Integer) map.get("pageSize"));
        List<Temphu> temphus = mapper.queryAll(map);
        return new TemphuPage(page.getPageSize(), page.getTotal(), temphus);
    }
}

在 java 中 <?> 代表一个未知的类型,和 Object 不同的是,这个未知类型不可以被操作,至少 Object 有一些基本的函数可以操作。<?> 提供了更灵活和类型安全的方式处理未知类型,而 Object 是一个具体的类。

  1. 调用 PageHelper.startPage 函数,传递一页数量和页码数。
  2. 调用 mapper 查询内容。
  3. 通过 page 对象,获取页码数量、总数,将这些数据和查询到的内容一同封装给 TemphuPage 实体类对象并返回出去。

controller

file:src/controllers/BaseController.java
@CrossOrigin
@RestController
@RequestMapping("/api")
public class BaseController {
    private final BaseService service;

    public BaseController(BaseService service) {
        this.service = service;
    }


    /**
     * pageNum:页码
     * pageSize:一页数量
     */
    @PostMapping("/temphu/query/all")
    public TemphuPage queryAll(@RequestBody Map<String, Object> map) {
        return service.queryAll(map);
    }
}