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

不用插件

    //当前页码private static final Integer currentPage = 2;//设置每页个数private static final Integer pageSize = 5;@Testpublic 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: mysqlreasonable: trueparams: count=countSqlsupport-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")@NotNullprivate Integer pageNum;@ApiModelProperty(value = "每页页数",required = true,example = "1")@NotNullprivate Integer pageSize;@Validprivate T data;}

案例

@PostMapping("pageTest")@ApiOperation("分页测试")public PageSerializable<UserInfoDTO> queryUserInfo(@RequestBody @Valid PageRequest<UserInfo> userInfoPageRequest){return duoService.listUserInfo(userInfoPageRequest);}
@Overridepublic 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结果

 优化分页代码

@Overridepublic 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>
@Overridepublic 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.mzph.cn/news/810717.shtml

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

相关文章

GPT建模与预测实战

代码链接见文末 效果图&#xff1a; 1.数据样本生成方法 训练配置参数&#xff1a; --epochs 40 --batch_size 8 --device 0 --train_path data/train.pkl 其中train.pkl是处理后的文件 因此&#xff0c;我们首先需要执行preprocess.py进行预处理操作&#xff0c;配置参数…

Android-NDK的linux交叉编译环境

NDK工具包下载 NDK 下载 | Android NDK | Android Developers https://github.com/android/ndk/wiki/Unsupported-Downloads 以android-ndk-r26c下载为例&#xff0c;下载后将压缩包解压至/usr目录下 CMakeLists编译选项设置 编译平台变量判断条件中增加一下android条件…

ubuntu下man手册 查不到 pthread_mutex_lock等系列函数用法的问题

问题 在ubuntu系统中无法man到 pthread_mutex_lock pthread_mutex_trylock pthread_mutex_unlock等函数 $ man pthread_mutex_lock 没有 pthread_mutex_lock 的手册页条目解决方式 输入以下命令 sudo apt-get install manpages-posix manpages-posix-dev 然后输入密码 再次m…

MobaXterm无法登陆oracle cloud的问题

问题 我在oracle cloud上创建实例的时候&#xff0c;只能使用密钥的方式登陆&#xff0c;当时下载了私钥文件。实例创建好以后&#xff0c;在mobaxterm上使用这个私钥文件无法登陆 排查 尝试使用mobaxterm的keygen&#xff0c;把私钥文件转成ppk格式&#xff0c;还是不行。…

高中数学:三角函数-同角与异角的三角函数关系

一、同角三角函数关系 1、基本公式 知一求二 2、快速求值方法 重点掌握辅助三角形方法 3、题型 3.1、一次式整式求值 sinα和cosα指数是一次的求值&#xff0c;建议用辅助三角形方法 例题 3.2、一次式分式求值 分子、分母同除以sinα或者cosα 例题 3.3、二次式…

区块链安全-----接口测试-Postman

Postman是一款支持http协议的接口调试与测试工具&#xff0c;其主要特点就是功能强大&#xff0c;使用简单且易 用性好 。无论是开发人员进行接口调试&#xff0c;还是测试人员做接口测试&#xff0c;Postman都是我们的首选工具 之一 。 更早的接入测试&#xff0c;更早的发现问…

切面条(蓝桥杯)

目录 题目 分析 代码实现 题目 一根高筋拉面&#xff0c;中间切一刀&#xff0c;可以得到2根面条。 如果先对折1次&#xff0c;中间切一刀&#xff0c;可以得到3根面条。 如果连续对折2次&#xff0c;中间切一刀&#xff0c;可以得到5根面条。 那么&#xff0c;连续对折1…

光耦合器的使用:了解输入和输出之间的关系

光耦合器也称为光隔离器&#xff0c;是许多电子电路中的重要组件&#xff0c;可在输入和输出信号之间提供隔离。它们在各种应用中确保安全、降低噪声和防止接地环路方面发挥着至关重要的作用。在本文中&#xff0c;我们将深入研究光耦合器的基础知识&#xff0c;探讨它们的工作…

人形机器人行业报告:AI赋能人形机器人开启产业化元年

今天分享的是人形机器人专题系列深度研究报告&#xff1a;《AI赋能&#xff0c;人形机器人开启产业化元年》。 &#xff08;报告出品方&#xff1a;国泰君安证券&#xff09; 报告共计&#xff1a;56页 要点 通用性是人形机器人商业化的关键&#xff0c;AI大模型赋能加速机…

打破传统,蔚莱普康定义国货美妆新未来

在全球美妆市场经济改革的今天&#xff0c;中国新兴品牌蔚莱普康&#xff0c;正在以前所未有的速度和规模&#xff0c;冲破瓶颈&#xff0c;赢得市场的广泛认可。这一切&#xff0c;得益于国家政策的扶持和国货品牌自身的不懈努力与创新。 各类国潮产品不断‘出圈’的背后&…

java程序 .exe启动nginx防止重复启动,已解决

java代码生成好的.exe启动nginx服务程序 根据nginx占用端口来解决nginx服务重复启动问题&#xff08;下面代码了解代码逻辑后根据自己的业务需求修改即可&#xff09; 代码&#xff1a; package org.example;import javax.swing.*; import java.awt.*; import java.io.*; …

Linux-select剖析

一、select函数 select函数是IO多路复用的函数&#xff0c;它主要的功能是用来等文件描述符中的事件是否就绪&#xff0c;select可以使我们在同时等待多个文件缓冲区 &#xff0c;减少IO等待的时间&#xff0c;能够提高进程的IO效率。 select()函数允许程序监视多个文件描述符…

书生·浦语大模型全链路开源体系-第3课

书生浦语大模型全链路开源体系-第3课 书生浦语大模型全链路开源体系-第3课相关资源RAG 概述在 InternLM Studio 上部署茴香豆技术助手环境配置配置基础环境下载基础文件下载安装茴香豆 使用茴香豆搭建 RAG 助手修改配置文件 创建知识库运行茴香豆知识助手 在茴香豆 Web 版中创建…

工作日常随记-总

软件测试主管工作日常随记-总 前言 接下来&#xff0c;我将开始散文式地记录我作为一位从业3年多的软件测试人员的软测经验。这是我在繁忙的日常工作的中跋涉出来又又投入的另一工作&#xff08;bushi&#xff09;另一兴趣中去。 我将简单&#xff08;偏流水线向&#xff09;…

50. QT/QML中创建多线程的方式汇总

1. 说明 在QT / QML中创建线程主要有三种方式。第一种:在定义类时继承 QThread 这个类,然后重写父类的虚函数 run(),将子线程需要执行的业务代码放到 run() 函数当中即可。**注意:**这种方式官方已经摒弃了。第二种:使用moveToThread()函数将需要在子线程中执行的函数类移…

【每日练习】二叉树

⭐ 作者&#xff1a;小胡_不糊涂 &#x1f331; 作者主页&#xff1a;小胡_不糊涂的个人主页 &#x1f4c0; 收录专栏&#xff1a;二叉树 &#x1f496; 持续更文&#xff0c;关注博主少走弯路&#xff0c;谢谢大家支持 &#x1f496; 文章目录 一、100. 相同的树1. 题目简介2.…

问题汇总

一、TCP的粘包和拆包问题&#xff1f; TCP在发送和接受数据的时候&#xff0c;有一个滑动窗口来控制接受数据的大小&#xff0c;这个滑动窗口你就可以理解为一个缓冲区的大小。缓冲区满了就会把数据发送&#xff0c;数据包的大小是不固定的&#xff0c;有时候比缓冲区大有时候…

NIST再次强调:2024-2030年,必须升级至抗量子算法

4月10日至12日&#xff0c;美国国家标准与技术研究院&#xff08;NIST&#xff09;在马里兰州罗克维尔举办第五届NIST PQC&#xff08;后量子密码学&#xff09;标准化会议&#xff0c;该会议的目的是对PQC算法进行全面讨论&#xff08;包括已选定和正在评估的算法&#xff09;…

如何处理ubuntu22.04LTS安装过程中出现“Daemons using outdated libraries”提示

Ubuntu 22.04 LTS 中使用命令行升级软件或安装任何新软件时&#xff0c;您可能收到“Daemons using outdated libraries”&#xff0c;“Which services should be restarted?”的提示&#xff0c;提示下面列出备选的重启服务&#xff0c;如下。 使用以下命令&#xff0c;能够…

LangChain - 文档加载

文章目录 一、关于 检索二、文档加载器入门指南 三、CSV1、使用每个文档一行的 CSV 数据加载 CSVLoader2、自定义 csv 解析和加载 &#xff08;csv_args3、指定用于 标识文档来源的 列&#xff08;source_column 四、文件目录 file_directory1、加载文件目录数据&#xff08;Di…