关于java分页功能以及传参规范

news2024/12/28 18:26:50

java分页以及传参规范,特此工作记录

不用插件

    //当前页码
    private static final Integer currentPage = 2;
    //设置每页个数
    private static final Integer pageSize = 5;

    @Test
    public void test8() {
        //手写一个分页测试,不用插件
        List<Integer> list = new ArrayList<>(Arrays.asList(1,2,3,4,5,
                6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22));
        for (int i = (currentPage-1)*pageSize; i < currentPage*pageSize; i++) {
            if (i>=list.size()){
                break;
            }
            Integer num = list.get(i);
            System.out.print(num+" ");
        }
    }

6 7 8 9 10  

PageHelper插件

PageHelper 是一款开源的 MyBatis 分页插件。不可和mybatis-plus搭配用。

引入jar包

<!--分页-->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>5.1.10</version>
</dependency>
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.2.10</version>
</dependency>

<!-- 参数校验 -->
<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>1.1.0.Final</version>
</dependency>

配置文件

pagehelper:
  auto-dialect: mysql
  reasonable: true
  params: count=countSql
  support-methods-arguments: true

定义分页请求泛型类

import com.sun.istack.internal.NotNull;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.Valid;
import java.io.Serializable;

@Data
@Api("分页请求对象")
public class PageRequest<T> implements Serializable {

    @ApiModelProperty(value = "当前页码",required = true,example = "1")
    @NotNull
    private Integer pageNum;

    @ApiModelProperty(value = "每页页数",required = true,example = "1")
    @NotNull
    private Integer pageSize;

    @Valid
    private T data;

}

案例

@PostMapping("pageTest")
    @ApiOperation("分页测试")
    public PageSerializable<UserInfoDTO> queryUserInfo(
            @RequestBody @Valid PageRequest<UserInfo> userInfoPageRequest){
        return duoService.listUserInfo(userInfoPageRequest);
    }
@Override
    public PageSerializable<UserInfoDTO> listUserInfo(PageRequest<UserInfo> pageRequest) {
        //首先将前端传入的参数赋给目标对象
        UserInfoParam userInfoParam = new UserInfoParam();
        BeanUtils.copyProperties(pageRequest.getData(), userInfoParam);
        int userCount = duoMapper.selectNum(userInfoParam);
        //开启分页
        PageMethod.startPage(pageRequest.getPageNum(), pageRequest.getPageSize());
        //开始查询数据
        List<UserInfoDTO> listInfo = duoMapper.selectByInfo(userInfoParam);
        if (userCount == 0){
            return new PageSerializable<>();
        }
        PageSerializable<UserInfoDTO> pageSerializable = new PageSerializable<>();
        pageSerializable.setTotal(userCount);
        pageSerializable.setList(listInfo);
        return pageSerializable;
    }

startPage放在查询语句上面,因为插件的原理是在sql上拼接 limit 传进去两个参数,传入了当前页码数和每页显示的条数

 比如

select * from user_info where area=? LIMIT ?, ?

swagger结果

 优化分页代码

@Override
    public PageSerializable<UserInfoDTO> listUserInfo(PageRequest<UserInfo> pageRequest) {
        //首先将前端传入的参数赋给目标对象
        UserInfoParam userInfoParam = new UserInfoParam();
        BeanUtils.copyProperties(pageRequest.getData(), userInfoParam);
        //开启分页
        PageMethod.startPage(pageRequest.getPageNum(), pageRequest.getPageSize());
        return new PageSerializable<>(duoMapper.selectByInfo(userInfoParam));
    }

这里用了Spring的拷贝函数,没有返回值,所以需要先实例化对象然后赋值。

import org.springframework.beans.BeanUtils;

BeanUtils.copyProperties(source,target);

把源对象source的属性值赋给目标对象target中与源对象source的中有着同属性名的属性,属性名和属性类型都相同的属性才能被成功拷贝赋值

这样做的目的是为了保持传参的原始性,方便在复杂的业务逻辑中进行比对。

传递到后台的参数,应该要求有专门的类, 返回结果也应该有专门的类,比如

入参:userRequest

复制给 userParam 对象并传到mapper层

mapper层结果返回给 userDO 对象

最后返回给前端为 userDTO 对象

这是一种规范的传参过程

其他的拷贝的函数hutool

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.4.2</version>
</dependency>
@Override
    public PageSerializable<UserInfoDTO> listUserInfo2(PageRequest<UserInfo> pageRequest) {
        //首先将前端传入的参数赋给目标对象
        UserInfoParam userInfoParam = BeanUtil.copyProperties(pageRequest.getData(), UserInfoParam.class);
        //开启分页
        PageMethod.startPage(pageRequest.getPageNum(), pageRequest.getPageSize());
        return new PageSerializable<>(duoMapper.selectByInfo(userInfoParam));
    }

建议使用hutool,因为有返回值,不需要实例化对象了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1602122.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vscode中运行js

vscode中运行js 目前vscode插件运行js都是基于node环境&#xff0c;vscode控制台打印有些数据不方便等缺点。 每次调试在浏览器中运行js&#xff0c;需要创建html模板、插入js。期望能够直接运行js可以打开浏览器运行js&#xff0c;在vscode插件市场找到一款插件可以做到。 插…

武汉星起航:跨境电商蓬勃发展 “买卖全球”激发外贸新活力

跨境电商正成为激活外贸新动能的重要力量。武汉星起航了解到&#xff0c;近日&#xff0c;沈阳综合保税区进口货仓内一派繁忙景象&#xff0c;满载着跨境电商进口商品的货车络绎不绝&#xff0c;这些商品将迅速送达全国各地消费者手中。这一景象&#xff0c;正是我国跨境电商业…

用Gold-yolo模块改进yolov8模型

gold-yolo论文&#xff1a; https://arxiv.org/pdf/2309.11331.pdf gold-yolo代码&#xff1a; https://github.com/huawei-noah/Efficient-Computing/tree/master/Detection/Gold-YOLO 一 gold模块简介 Gold-Yolo是华为诺亚方舟实验室2023年发布的工作&#xff0c;主要优化检…

操作系统安全

操作系统属于软件安全的范畴。 什么是操作系统&#xff1f; 操作系统是硬件和软件应用程序之间接口的程序模块&#xff0c;是计算机资源的管理者。操作系统是保证安全的重要基础。 一、操作系统安全基础 操作系统保护的对象 操作系统的安全功能 用户认证存储器保护文件与I/O设…

基于GIS、python机器学习技术的地质灾害风险评价与信息化建库应用

结合项目实践案例和科研论文成果进行讲解。入门篇&#xff0c;ArcGIS软件的快速入门与GIS数据源的获取与理解&#xff1b;方法篇&#xff0c;致灾因子提取方法、灾害危险性因子分析指标体系的建立方法和灾害危险性评价模型构建方法&#xff1b;拓展篇&#xff0c;GIS在灾害重建…

electron打包dist为可执行程序后记【electron-quick-start】

文章目录 目录 文章目录 前言 一、直接看效果 二、实现步骤 1.准备dist文件夹 2.NVM管理node版本 3.准备electron容器并npm run start 4.封装成可执行程序 1.手动下载electron对应版本的zip文件&#xff0c;解决打包缓慢问题 2.安装packager 3.配置打包命令执行内容…

利用CSS延迟动画,打造令人惊艳的复杂动画效果!

动画在前端开发中是经常遇到的场景之一&#xff0c;加入动画后页面可以极大的提升用户体验。 绝大多数简单的动画场景可以直接通过CSS实现&#xff0c;对于一些特殊场景的动画可能会使用到JS计算实现&#xff0c;通过本文的学习&#xff0c;可以让你在一些看似需要使用JS实现的…

广东东莞机房建设

在信息技术迅猛发展的今天&#xff0c;机房作为企业信息化的核心基础设施&#xff0c;其建设质量直接关系到企业数据的安全、系统的稳定以及业务的持续发展。特别是在广东省这样经济发达、科技先进的前沿地区&#xff0c;企业对机房的高效性、安全性和可靠性提出了更高的要求。…

【AAAI2024】点云的自适应邻域提取

论文标题&#xff1a;Point Deformable Network with Enhanced Normal Embedding for Point Cloud Analysis 论文地址&#xff1a;https://ojs.aaai.org/index.php/AAAI/article/view/28497 两个创新点&#xff1a;可变邻域法向量提取 一、由固定邻居变为可变的邻域 二、最小二…

智慧公厕:打造城市品质生活的必备设施

公共厕所一直是城市管理中不可忽视的一环&#xff0c;而随着智慧科技的发展&#xff0c;智慧公厕逐渐成为改善城市品质生活的利器。智慧公厕作为一种创新的公共卫生设施&#xff0c;其带来的好处不仅体现在对公共厕所的全面监测和高效智慧化管理&#xff0c;更是为市民提供了更…

C/C++ BM25二叉树的后序遍历

文章目录 前言题目解决方案一1.1 思路阐述1.2 源码 解决方案二总结 前言 和前序遍历中序遍历一致&#xff0c;换个顺序就行。 详情参考C/C BM23 二叉树的前序遍历 详情参考C/C BM24 二叉树的中序遍历 题目 给定一个二叉树&#xff0c;返回他的后序遍历的序列。 后序遍历是值…

python读取DBF数据

DBF文件通常是由数据库软件&#xff08;如FoxPro或dBASE&#xff09;创建的数据库文件。Python中并没有直接读取DBF文件的内置库&#xff0c;但你可以使用第三方库如dbfread来读取DBF文件。 首先&#xff0c;你需要安装dbfread库。你可以使用pip来安装&#xff1a; pip insta…

使用 wireshark 抓包,在 postman 中模拟请求给小朋友投票

突然某天在微信群里收到了朋友的投票请求&#xff0c;点进去发现不需要授权&#xff0c;我就喜欢这样不需要登录的投票网站 在电脑端微信打开后&#xff0c;微信浏览器右上角可以复制链接 于是&#xff0c;我拿到了这个地址&#xff1a;http://hjkki.cvnxoz.cn/app/YYkEgSzlr…

服务器中毒怎么办?企业数据安全需重视

互联网企业&#xff1a; 广义的互联网企业是指以计算机网络技术为基础&#xff0c;利用网络平台提供服务并因此获得收入的企业。广义的互联网企业可以分为:基础层互联网企业、服务层互联网企业、终端层互联网企业。 狭义的互联网企业是指在互联网上注册域名&#xff0c;建立网…

【c++】stack和queue使用 stack和queue模拟实现

主页&#xff1a;醋溜马桶圈-CSDN博客 专栏&#xff1a;c_醋溜马桶圈的博客-CSDN博客 gitee&#xff1a;mnxcc (mnxcc) - Gitee.com 目录 1. stack的介绍和使用 1.1 stack的介绍 1.2 stack的使用 1.3 stack的模拟实现 2. queue的介绍和使用 2.1 queue的介绍 2.2 queue的…

Web端即时通讯必备技术:WebSocket快速入门

随着Web应用程序的不断发展&#xff0c;越来越多的应用需要实现实时交互和通信。然而&#xff0c;传统的HTTP协议只支持单向通信&#xff0c;即客户端向服务器发送请求并接收响应。为了解决这一限制&#xff0c;WebSocket技术应运而生。本文将为大家介绍即时通讯技术 WebSocket…

linux 挂载云盘 NT只能挂载2T,使用parted挂载超过2T云盘

一、删除原来挂载好的云盘和分区 1、查看挂载号的云盘 fdisk -l 发现我们有5千多G但是只挂载了2T&#xff0c;心里非常的慌张&#xff01;十分的不爽&#xff01; 好&#xff0c;我们把它干掉&#xff0c;重新分区&#xff01; 2、解除挂载 umount /homeE 没保存跳转到&…

Elasticsearch:(一)ES简介

搜索引擎是什么&#xff1f;在不少开发者眼中&#xff0c;ES似乎就是搜索引擎的代名词&#xff0c;然而这实际上是一种误解。搜索引擎是一种专门用于从互联网中检索信息的技术工具&#xff0c;它主要可以划分为元搜索引擎、全文搜索引擎和垂直搜索引擎几大类。其中&#xff0c;…

【算法一则】矩阵置零 【矩阵】【空间复用】

题目 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,1,1],[1,0,1],[1,1,1]] 输出&#xff1a;[[1,0,1],[0,0,0],[1,0,1]]示例 2&#xff1a; …

设计模式代码实战-中间者模式

1、问题描述 小明正在设计一个简单的多人聊天室系统&#xff0c;有多个用户和一个聊天室中介者&#xff0c;用户通过中介者进行聊天&#xff0c;请你帮他完成这个系统的设计。 输入示例 3 User1 User2 User3 User1 Hello_All! User2 Hi_User1! User3 How_is_everyone? 输出…