SpringBoot 如何增强PageHelper入参的健壮性

PageHelper.startPage(int pageNum, int pageSize, boolean count) 参数为外部输入,故存在异常输入场景。比如 pageNumpageSize 输入的值 负数 或者 0,所以引入PageUtils来对入参进行判断矫正,从而避免引入异常。

第1步:支持配置的方式来修改默认值

yaml 复制代码
page-helper:
  default-page-num: 1
  default-page-size: 10
  max-page-size: 50
  count-total-or-not: true

第2步:引入PageUtils

java 复制代码
import jakarta.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.util.Objects;

@Component
public class PageUtils {
    private static int defaultPageNumber; // 默认显示第几页
    private static int defaultPageSize; // 默认每页显示多少条数据
    private static int maxSizePage; // 每页显示条数上限
    private static boolean isQueryTotalCount; // 每次查询DB时,是否进行count查询

    @Value("${page-helper.default-page-num:1}")
    private int pageNumberFromConfig;
    @Value("${page-helper.default-page-size:10}")
    private int pageSizeFromConfig;
    @Value("${page-helper.max-page-size:15}")
    private int maxSizePerPageFromConfig;
    @Value("${page-helper.count-total-or-not:true}")
    private boolean isQueryTotalFromConfig;

    @PostConstruct
    private void init() {
        defaultPageNumber = pageNumberFromConfig;
        defaultPageSize = pageSizeFromConfig;
        maxSizePage = maxSizePerPageFromConfig;
        isQueryTotalCount = isQueryTotalFromConfig;
    }

    public static int getPageNum(Integer pageNum) {
        if (Objects.isNull(pageNum) || pageNum <= 0) {
            return defaultPageNumber;
        } else {
            return pageNum;
        }
    }

    public static int getPageSize(Integer pageSize) {
        if (Objects.isNull(pageSize) || pageSize <= 0) {
            return defaultPageSize;
        } else if (pageSize > 100) {
            return maxSizePage;
        } else {
            return pageSize;
        }
    }

    public static boolean isQueryTotalCount() {
        return isQueryTotalCount;
    }
}

第3步:使用

java 复制代码
public List<Student> listStudents(Integer pageNum, Integer PageSize) {
    PageHelper.startPage(PageUtils.getPageNum(pageNum), PageUtils.getPageSize(PageSize), PageUtils.isQueryTotalCount());
    PageHelper.orderBy("age asc");

    List<Student> students = userMapper.listStudents();

    PageInfo<Student> studentPageInfo = PageInfo.of(students);
    return students;
}

参考

@PostConstruct 的执行时机

相关推荐
Lhappy嘻嘻2 小时前
Java IO|File 文件操作 + 字节流 / 字符流完整笔记 + 递归删除文件实战
java·笔记·php
To_OC3 小时前
手写 AI 编程 Agent 的命令执行工具:我被 child_process 坑出来的实战经验
后端·node.js·agent
伊玛目的门徒3 小时前
试用leetcode之典中典 二数之和问题
java·算法·leetcode
逝水无殇5 小时前
C# 异常处理详解
开发语言·后端·c#
懒鸟一枚6 小时前
深入理解 Linux 内存、Swap 交换分区与分页机制的关系
java·linux·数据库
我命由我123457 小时前
执行 Gradle 指令报错,无法将“grep”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
考虑考虑7 小时前
Sentinel安装
java·后端·微服务
IT_陈寒7 小时前
SpringBoot自动配置失灵?你可能忘了这个关键注解
前端·人工智能·后端
碎碎念_4927 小时前
SpringBoot + Vue 前后端分离从 0 到 1 完整环境配置流程
vue.js·spring boot·后端
逝水无殇8 小时前
C# 文件的输入与输出详解
开发语言·数据库·后端·c#