当前位置: 首页 > news >正文

分页处理封装+分页查询题目列表

文章目录

    • 1.sun-club-common封装分页
        • 1.com/sunxiansheng/subject/common/eneity/PageInfo.java
        • 2.com/sunxiansheng/subject/common/eneity/PageResult.java
    • 2.sun-club-application-controller
        • 1.SubjectInfoDTO.java 继承PageInfo并新增字段
        • 2.SubjectController.java
    • 3.sun-club-domain
        • 1.SubjectInfoBO.java 继承PageInfo并增加字段
        • 2.SubjectInfoDomainService.java
        • 3.SubjectInfoDomainServiceImpl.java
    • 4.sun-club-infra
        • 1.SubjectInfoService.java
        • 2.SubjectInfoServiceImpl.java
        • 3.SubjectInfoDao.java
        • 4.SubjectInfoDao.xml
        • 5.测试

1.sun-club-common封装分页

1.com/sunxiansheng/subject/common/eneity/PageInfo.java
package com.sunxiansheng.subject.common.eneity;/*** Description: 分页请求的入参* @Author sun* @Create 2024/5/28 16:25* @Version 1.0*/
public class PageInfo {private Integer pageNo = 1;private Integer pageSize = 20;public Integer getPageNo() {if (pageNo == null || pageNo < 1) {return 1;}return pageNo;}public Integer getPageSize() {if (pageSize == null || pageSize < 1 || pageSize > Integer.MAX_VALUE) {return 20;}return pageSize;}public void setPageNo(Integer pageNo) {this.pageNo = pageNo;}public void setPageSize(Integer pageSize) {this.pageSize = pageSize;}
}
2.com/sunxiansheng/subject/common/eneity/PageResult.java
package com.sunxiansheng.subject.common.eneity;import java.util.Collections;
import java.util.List;/*** Description: 分页返回的实体* @Author sun* @Create 2024/5/28 16:36* @Version 1.1*/
public class PageResult<T> {// 当前页码,默认为1private Integer pageNo = 1;// 每页显示的记录数,默认为20private Integer pageSize = 20;// 总记录条数private Integer total = 0;// 总页数private Integer totalPages = 0;// 当前页的记录列表private List<T> result = Collections.emptyList();// 表示当前页是从数据库的第几条记录开始,下标从1开始private Integer start = 1;// 表示当前页是从数据库的第几条记录结束,下标从1开始private Integer end = 0;// 设置当前页码,并重新计算起始和结束位置public void setPageNo(Integer pageNo) {this.pageNo = pageNo;calculateStartAndEnd();}// 设置每页记录数,并重新计算起始和结束位置public void setPageSize(Integer pageSize) {this.pageSize = pageSize;calculateStartAndEnd();}// 设置当前页的记录列表public void setRecords(List<T> result) {this.result = result;}// 设置总记录条数,并重新计算总页数和起始结束位置public void setTotal(Integer total) {this.total = total;calculateTotalPages();calculateStartAndEnd();}// 计算总页数private void calculateTotalPages() {if (this.pageSize > 0) {this.totalPages = (this.total / this.pageSize) + (this.total % this.pageSize == 0 ? 0 : 1);} else {this.totalPages = 0;}}// 计算起始和结束位置private void calculateStartAndEnd() {if (this.pageSize > 0) {this.start = (this.pageNo - 1) * this.pageSize + 1;this.end = Math.min(this.pageNo * this.pageSize, this.total);} else {this.start = 1;this.end = this.total;}}// 获取数据库查询的起始位置(从0开始)public Integer getDBStart() {return start - 1;}// 获取每页记录数public Integer getPageSize() {return pageSize;}// 可选的 Getters 和 Setterspublic Integer getPageNo() {return pageNo;}public Integer getTotal() {return total;}public Integer getTotalPages() {return totalPages;}public List<T> getResult() {return result;}public Integer getEnd() {return end;}public Integer getStart() {return start;}
}

2.sun-club-application-controller

1.SubjectInfoDTO.java 继承PageInfo并新增字段
package com.sunxiansheng.subject.application.dto;import com.sunxiansheng.subject.common.eneity.PageInfo;
import lombok.Data;import java.io.Serializable;
import java.util.List;/*** 题目信息表(SubjectInfo)实体类** @author makejava* @since 2024-05-26 17:26:43*/
@Data
public class SubjectInfoDTO extends PageInfo implements Serializable {private static final long serialVersionUID = -99877276843752542L;/*** 主键*/private Long id;/*** 题目名称*/private String subjectName;/*** 题目难度*/private Integer subjectDifficult;/*** 题目类型 1单选 2多选 3判断 4简答*/private Integer subjectType;/*** 题目分数*/private Integer subjectScore;/*** 题目解析*/private String subjectParse;/*** 题目答案*/private String subjectAnswer;/*** 分类id*/private List<Long> categoryIds;/*** 标签id*/private List<Long> labelIds;/*** 答案选项*/private List<SubjectAnswerDTO> optionList;/*** 分类id*/private Long categoryId;/*** 标签id*/private Long labelId;
}
2.SubjectController.java
/*** 分页查询题目列表* @param subjectInfoDTO* @return*/
@PostMapping("/getSubjectPage")
public Result<PageResult<SubjectInfoDTO>> getSubjectPage(@RequestBody SubjectInfoDTO subjectInfoDTO) {try {// 打印日志if (log.isInfoEnabled()) {log.info("SubjectController getSubjectPage SubjectInfoDTO, subjectInfoDTO:{}", JSON.toJSONString(subjectInfoDTO));}// 参数校验Preconditions.checkNotNull(subjectInfoDTO.getCategoryId(), "分类id不能为空");Preconditions.checkNotNull(subjectInfoDTO.getLabelId(), "标签id不能为空");// 转换DTO为BOSubjectInfoBO subjectInfoBO = SubjectInfoDTOConverter.INSTANCE.convertDTO2BO(subjectInfoDTO);// 由于mapstruct在转换的时候不会考虑继承的字段,所以需要手动转换subjectInfoBO.setPageNo(subjectInfoDTO.getPageNo());subjectInfoBO.setPageSize(subjectInfoDTO.getPageSize());// 分页查询题目列表PageResult<SubjectInfoBO> boPageResult = subjectInfoDomainService.getSubjectPage(subjectInfoBO);return Result.ok(boPageResult);} catch (Exception e) {log.error("SubjectController getSubjectPage error, subjectInfoDTO:{}", e.getMessage(), e);return Result.fail("分页查询题目列表失败");}
}

3.sun-club-domain

1.SubjectInfoBO.java 继承PageInfo并增加字段
package com.sunxiansheng.subject.domain.entity;import com.sunxiansheng.subject.common.eneity.PageInfo;
import lombok.Data;import java.io.Serializable;
import java.util.List;/*** 题目信息表(SubjectInfo)实体类** @author makejava* @since 2024-05-26 17:26:43*/
@Data
public class SubjectInfoBO extends PageInfo implements Serializable {private static final long serialVersionUID = 1L;/*** 主键*/private Long id;/*** 题目名称*/private String subjectName;/*** 题目难度*/private Integer subjectDifficult;/*** 题目类型 1单选 2多选 3判断 4简答*/private Integer subjectType;/*** 题目分数*/private Integer subjectScore;/*** 题目解析*/private String subjectParse;/*** 题目答案*/private String subjectAnswer;/*** 分类id*/private List<Long> categoryIds;/*** 标签id*/private List<Long> labelIds;/*** 答案选项*/private List<SubjectAnswerBO> optionList;/*** 分类id*/private Long categoryId;/*** 标签id*/private Long labelId;
}
2.SubjectInfoDomainService.java
/*** 分页查询题目列表* @param subjectInfoBO* @return*/
PageResult<SubjectInfoBO> getSubjectPage(SubjectInfoBO subjectInfoBO);
3.SubjectInfoDomainServiceImpl.java
@Override
public PageResult<SubjectInfoBO> getSubjectPage(SubjectInfoBO subjectInfoBO) {// 打印日志if (log.isInfoEnabled()) {log.info("SubjectInfoDomainServiceImpl getSubjectPage SubjectInfoBO, SubjectInfoBO:{}", subjectInfoBO);}// 创建一个要返回的对象PageResult<SubjectInfoBO> pageResult = new PageResult<>();pageResult.setPageNo(subjectInfoBO.getPageNo());pageResult.setPageSize(subjectInfoBO.getPageSize());// 将bo转换为eneitySubjectInfo subjectInfo = SubjectInfoConverter.INSTANCE.convertBoToSubjectInfo(subjectInfoBO);// 根据条件查询记录条数int count = subjectInfoService.countByCondition(subjectInfo, subjectInfoBO.getCategoryId(), subjectInfoBO.getLabelId());// 进行判断if (count == 0) {return pageResult;}// 设置总记录条数pageResult.setTotal(count);// 进行分页查询List<SubjectInfo> subjectInfoList = subjectInfoService.queryPage(subjectInfo, subjectInfoBO.getCategoryId(), subjectInfoBO.getLabelId(),pageResult.getDBStart(), pageResult.getPageSize());// 将entity转换为boList<SubjectInfoBO> subjectInfoBOS = SubjectInfoConverter.INSTANCE.convertSubjectInfoToBo(subjectInfoList);// 设置所有的记录pageResult.setRecords(subjectInfoBOS);return pageResult;
}

4.sun-club-infra

1.SubjectInfoService.java
/*** 根据条件返回题目的记录条数* @param subjectInfo* @param categoryId* @param labelId* @return*/
int countByCondition(SubjectInfo subjectInfo, Long categoryId, Long labelId);/*** 根据条件返回题目的记录* @param subjectInfo* @param categoryId* @param labelId* @param start* @param pageSize* @return*/
List<SubjectInfo> queryPage(SubjectInfo subjectInfo, Long categoryId, Long labelId, Integer start, Integer pageSize);
2.SubjectInfoServiceImpl.java
    /*** 根据条件查询出题目的数量** @param subjectInfo* @param categoryId* @param labelId* @return*/@Overridepublic int countByCondition(SubjectInfo subjectInfo, Long categoryId, Long labelId) {return subjectInfoDao.countByCondition(subjectInfo, categoryId, labelId);}/*** 根据条件返回题目的记录* @param subjectInfo* @param categoryId* @param labelId* @param start* @param pageSize* @return*/@Overridepublic List<SubjectInfo> queryPage(SubjectInfo subjectInfo, Long categoryId, Long labelId, Integer start, Integer pageSize) {return subjectInfoDao.queryPage(subjectInfo, categoryId, labelId, start, pageSize);}
3.SubjectInfoDao.java
/*** 根据条件返回题目的记录条数* @param subjectInfo* @param categoryId* @param labelId* @return*/
int countByCondition(@Param("subjectInfo") SubjectInfo subjectInfo,@Param("categoryId") Long categoryId,@Param("labelId") Long labelId);/*** 根据条件返回题目的记录* @param subjectInfo* @param categoryId* @param labelId* @param start* @param pageSize* @return*/
List<SubjectInfo> queryPage(@Param("subjectInfo") SubjectInfo subjectInfo,@Param("categoryId") Long categoryId,@Param("labelId") Long labelId,@Param("start") Integer start,@Param("pageSize") Integer pageSize);
4.SubjectInfoDao.xml
<!--根据条件统计总行数-->
<select id="countByCondition" resultType="java.lang.Integer">select count(1)from subject_info a,subject_mapping bwhere a.id = b.subject_idand a.is_deleted = 0and b.is_deleted = 0and a.subject_difficult = #{subjectInfo.subjectDifficult}and b.category_id = #{categoryId}and b.label_id = #{labelId}
</select><!--根据条件分页查询-->
<select id="queryPage" resultMap="SubjectInfoMap">select a.id,a.subject_name,a.subject_difficult,a.settle_name,a.subject_type,a.subject_score,a.subject_parse,a.created_by,a.created_time,a.update_by,a.update_time,a.is_deletedfrom subject_info a,subject_mapping bwhere a.id = b.subject_idand a.is_deleted = 0and b.is_deleted = 0and a.subject_difficult = #{subjectInfo.subjectDifficult}and b.category_id = #{categoryId}and b.label_id = #{labelId}limit #{start}, #{pageSize}
</select>
5.测试

image-20240529165152208

相关文章:

分页处理封装+分页查询题目列表

文章目录 1.sun-club-common封装分页1.com/sunxiansheng/subject/common/eneity/PageInfo.java2.com/sunxiansheng/subject/common/eneity/PageResult.java 2.sun-club-application-controller1.SubjectInfoDTO.java 继承PageInfo并新增字段2.SubjectController.java 3.sun-clu…...

每天一个项目管理概念之WBS

项目管理中的工作分解结构&#xff08;Work Breakdown Structure&#xff0c;简称WBS&#xff09;是规划和管理项目的核心工具之一&#xff0c;它通过将复杂的项目任务细分为更小、更易管理的部分来提高项目执行的效率与效果。WBS不仅有助于明确项目范围&#xff0c;还为时间管…...

linux安装mysql8并查看密码

1. **下载RPM包**&#xff1a; wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm 2. **安装RPM包**&#xff1a; sudo rpm -ivh mysql80-community-release-el7-3.noarch.rpm 3. **更新YUM缓存**&#xff1a; sudo yum makecache 4. **安装…...

[渗透测试] 任意文件读取漏洞

任意文件读取漏洞 概述 漏洞成因 存在读取文件的功能&#xff08;Web应用开放了文件读取功能&#xff09;读取文件的路径客户端可控&#xff08;完全控制或者影响文件路径&#xff09;没有对文件路径进行校验或者校验不严格导致被绕过输出文件内容 漏洞危害 下载服务器中的…...

sudo: /etc/init.d/ssh: command not found

在 WSL 中尝试启动 SSH 服务时遇到 sudo: /etc/init.d/ssh: command not found 错误 安装 OpenSSH 服务器 更新软件包列表 sudo apt update安装 OpenSSH 服务器 sudo apt install openssh-server启动 SSH 服务 在 WSL 2 上,服务管理与传统 Linux 系统有所不同。你可以手动启动…...

秋招倒计时?到底需要准备到什么程度?

秋招倒计时&#xff1f;需要准备到什么程度&#xff1f; 秋招&#xff0c;面向全国的毕业生&#xff0c;招聘的激烈程度可想而知&#xff01;按照往年时间&#xff0c;秋招通常从八月初开始&#xff0c;九月黄金期&#xff0c;十月中后期。距今刚好差不多60天&#xff0c;时间其…...

6.26.4.1 基于交叉视角变换的未配准医学图像多视角分析

1. 介绍 许多医学成像任务使用来自多个视图或模式的数据&#xff0c;但很难有效地将这些数据结合起来。虽然多模态图像通常可以在神经网络中作为多个输入通道进行配准和处理&#xff0c;但来自不同视图的图像可能难以正确配准(例如&#xff0c;[2])。因此&#xff0c;大多数多视…...

62.指针和二维数组(2)

一.指针和二维数组 1.如a是一个二维数组&#xff0c;则数组中的第i行可以看作是一个一维数组&#xff0c;这个一维数组的数组名是a[i]。 2.a[i]代表二维数组中第i行的首个元素的地址&#xff0c;即a[i][0]的地址。 二.进一步思考 二维数组可以看作是数组的数组&#xff0c;本…...

学生表的DDL和DML

DDL -- 创建学生表 CREATE TABLE students (student_id INT PRIMARY KEY AUTO_INCREMENT,studentname VARCHAR(50),age INT,gender VARCHAR(10) );-- 创建课程表 CREATE TABLE courses (course_id INT PRIMARY KEY AUTO_INCREMENT,course_name VARCHAR(50) );-- 创建教师表 CR…...

视觉灵感的探索和分享平台

做设计没灵感&#xff1f;大脑一片空白&#xff1f;灵感是创作的源泉&#xff0c;也是作品的灵魂所在。工作中缺少灵感&#xff0c;这是每个设计师都会经历的苦恼&#xff0c;那当我们灵感匮乏的时候&#xff0c;该怎么办呢&#xff1f;别急&#xff0c;即时设计、SurfCG、Lapa…...

使用 Reqable 在 MuMu 模拟器进行App抓包(https)

1、为什么要抓包&#xff1f; 用开发手机应用时&#xff0c;查看接口数据不能像在浏览器中可以直接通过network查看&#xff0c;只能借助抓包工具来抓包&#xff0c;还有一些线上应用我们也只能通过抓包来排查具体的问题。 2、抓包工具 实现抓包&#xff0c;需要一个抓包工具…...

RedisConnectionException: Unable to connect to localhost/<unresolved>:6379

方法一&#xff1a;删除配置密码选项 一般是因为你在启动redsi服务的时候没有以指定配置文件启动 把application.yml文件中的redis密码注释掉 方法二 以指定配置文件启动 这样就不用删除yml文件中密码的选项了 在redis,windows.conf 中找到requirepass&#xff0c;删除掉前…...

poi word写入图片

直接使用的百度结果&#xff0c;经过测试可行 1.pom增加jar <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.2.3</version></dependency><dependency><groupId>org.apach…...

【监控】2.Grafana的安装

在 macOS 上部署 Grafana 和 Prometheus 来监控 Java 服务是一个非常实用的操作。以下是详细的步骤&#xff0c;包括如何安装和配置 Prometheus、Grafana 以及在 Java 服务中集成 Prometheus 的客户端库来收集指标数据。 1. 安装 Grafana 1.1 使用 Homebrew 安装 Grafana br…...

Java入门教程(上)

Java入门教程&#xff08;上&#xff09; Java是一种流行的面向对象编程语言&#xff0c;以其简洁、可移植和强大的特性&#xff0c;被广泛应用于各种软件开发领域。对于初学者来说&#xff0c;掌握Java的基础知识和编程技巧是非常重要的。本文将带你从零开始学习Java&#xf…...

【Linux】Linux下使用套接字进行网络编程

&#x1f525;博客主页&#xff1a; 我要成为C领域大神&#x1f3a5;系列专栏&#xff1a;【C核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 ​ 用于网络应用开…...

强化学习-Q-learning、SARSA和PPO等算法

强化学习 强化学习是一种机器学习方法&#xff0c;它关注智能体如何通过与环境的交互来最大化期望的累积奖励。在这个过程中&#xff0c;智能体不断尝试不同的行为策略&#xff0c;并根据结果调整策略&#xff0c;以提高长期的性能。以下是几种常见的强化学习算法&#xff1a;…...

HarmonyOS SDK助力鸿蒙原生应用“易感知、易理解、易操作”

6月21-23日&#xff0c;华为开发者大会&#xff08;HDC 2024&#xff09;盛大开幕。6月23日上午&#xff0c;《HarmonyOS开放能力&#xff0c;使能应用原生易用体验》分论坛成功举办&#xff0c;大会邀请了多位华为技术专家深度解读如何通过根技术、开放能力、场景化控件等亮点…...

Java基础入门day72

day72 mybatis mybatis的实现方式 三种实现方式&#xff1a; 纯xml方式&#xff0c;namespace随便写&#xff0c;id随便写&#xff0c;只要保证整个项目namespaceid唯一即可 xml接口的方式&#xff0c;namespace必须是接口的全路径&#xff0c;id必须是接口的方法名&#xf…...

文本编辑命令和正则表达式

一、 编辑文本的命令 正则表达式匹配的是文本内容&#xff0c;Linux的文本三剑客&#xff0c;都是针对文本内容。 文本三剑客 grep&#xff1a;过滤文本内容 sed&#xff1a;针对文本内容进行增删改查 &#xff08;本文不相关&#xff09; awk&#xff1a;按行取列 &#x…...

STM32温湿度监控系统设计与实现

## 1. 工业生产线温湿度监控系统设计### 1.1 系统架构设计 基于STM32F103C8T6微控制器的工业级温湿度监控系统采用三层架构&#xff1a; - **感知层**&#xff1a;3个DHT22数字温湿度传感器 - **控制层**&#xff1a;STM32F103C8T6最小系统板 - **云平台层**&#xff1a;ESP826…...

CI/CD 流水线性能优化:从构建到部署

CI/CD 流水线性能优化&#xff1a;从构建到部署 前言 哥们&#xff0c;别整那些花里胡哨的理论。今天直接上硬菜——我在大厂一线优化 CI/CD 流水线性能的真实经验总结。作为一个白天写前端、晚上打鼓的硬核工程师&#xff0c;我对效率的追求就像对鼓点节奏的把控一样严格。 背…...

机器视觉C# 调用相机:从 USB 摄像头到海康工业相机(WinForms WPF)

&#x1f3a5; 机器视觉C# 调用相机&#xff1a;从 USB 摄像头到海康工业相机&#xff08;WinForms & WPF&#xff09; &#x1f4dd; 前言 在工业自动化、医疗影像或简单软件开发中&#xff0c;调用摄像头是一个绕不开的话题。在项目中同时遇到了两种需求&#xff1a; …...

这次终于选对了!盘点2026年圈粉无数的AI论文网站

一天写完毕业论文在2026年已不再是天方夜谭。这是2026年最炸裂、实测能大幅提速的AI论文网站&#xff0c;覆盖选题、写作、查重、排版全流程&#xff0c;真正帮你高效搞定论文。 一、全流程王者&#xff1a;一站式搞定论文全链路&#xff08;一天定稿首选&#xff09; 这类工具…...

ONLYOFFICE Docs与Nextcloud Calendar集成:打造高效私有云日程协作平台

ONLYOFFICE Docs与Nextcloud Calendar集成&#xff1a;打造高效私有云日程协作平台 【免费下载链接】DocumentServer ONLYOFFICE Docs is a free collaborative online office suite comprising viewers and editors for texts, spreadsheets and presentations, forms and PDF…...

本地部署 Ollama + DeepSeek 完整指南:免费跑大模型,数据不出本地

本地部署 Ollama DeepSeek 完整指南&#xff1a;免费跑大模型&#xff0c;数据不出本地不花一分钱&#xff0c;不用科学上网&#xff0c;在自己电脑上跑 DeepSeek 大模型&#xff0c;这篇教程手把手带你搞定一、为什么要本地部署&#xff1f; 很多人用 AI 工具都是调用云端 AP…...

3步彻底解决Umi-OCR Rapid版本HTTP服务无响应问题:参数配置完全指南

3步彻底解决Umi-OCR Rapid版本HTTP服务无响应问题&#xff1a;参数配置完全指南 【免费下载链接】Umi-OCR Umi-OCR: 这是一个免费、开源、可批量处理的离线OCR软件&#xff0c;适用于Windows系统&#xff0c;支持截图OCR、批量OCR、二维码识别等功能。 项目地址: https://git…...

双模型混搭方案:OpenClaw同时接入百川2-13B与Qwen的实操演示

双模型混搭方案&#xff1a;OpenClaw同时接入百川2-13B与Qwen的实操演示 1. 为什么需要多模型混搭&#xff1f; 去年冬天&#xff0c;当我第一次尝试用OpenClaw自动化处理技术文档时&#xff0c;发现一个有趣的现象&#xff1a;同一个模型在不同任务上的表现差异巨大。Qwen在…...

如何高效优化多语言模型:专业部署的完整策略

如何高效优化多语言模型&#xff1a;专业部署的完整策略 【免费下载链接】paraphrase-multilingual-MiniLM-L12-v2 项目地址: https://ai.gitcode.com/hf_mirrors/ai-gitcode/paraphrase-multilingual-MiniLM-L12-v2 你是否在部署多语言文本嵌入模型时遭遇过"显存…...

Pixel Fashion Atelier入门必看:Forge!按钮物理位移反馈的CSS3实现原理

Pixel Fashion Atelier入门必看&#xff1a;Forge!按钮物理位移反馈的CSS3实现原理 1. 引言&#xff1a;像素世界的物理交互 在Pixel Fashion Atelier这款独特的图像生成工具中&#xff0c;最令人印象深刻的莫过于那个醒目的橙色"锻造"按钮。当用户点击时&#xff…...