当前位置: 首页 > 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…...

FanControl终极指南:Windows电脑风扇智能控制软件完全解析

FanControl终极指南&#xff1a;Windows电脑风扇智能控制软件完全解析 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trendin…...

从“Hello There!”徽章看低功耗Mesh网络在嵌入式社交硬件的实现

1. 项目概述&#xff1a;当硬件徽章成为社交网络的物理层如果你参加过大型的技术会议&#xff0c;尤其是像嵌入式系统大会&#xff08;ESC&#xff09;这样的场合&#xff0c;你肯定对那种既兴奋又略带尴尬的社交氛围不陌生。满屋子都是聪明绝顶的工程师&#xff0c;大家脑子里…...

控制流验证与硬件性能计数器的融合技术解析

1. 控制流验证与硬件性能计数器的融合在当今云计算和边缘计算环境中&#xff0c;可信执行环境&#xff08;TEE&#xff09;已成为保护敏感数据的关键技术。然而&#xff0c;传统的静态验证方法存在一个致命缺陷——它们无法防御运行时攻击。想象一下&#xff0c;你给朋友寄了一…...

代码所有权的悖论:集体智慧与个人责任的边界

代码世界的身份迷局在软件测试的日常工作中&#xff0c;我们时常会陷入这样的困惑&#xff1a;当面对一行引发系统崩溃的代码时&#xff0c;究竟该追溯到最初编写它的开发者&#xff0c;还是问责于后续不断迭代维护的团队&#xff1f;当一个历经数十人之手、跨越数年周期的模块…...

Flutter for OpenHarmony 学习视频播放器技术文章

Flutter for OpenHarmony 学习视频播放器技术文章 欢迎加入开源鸿蒙跨平台社区&#xff1a;https://openharmonycrossplatform.csdn.net &#x1f3ac; Flutter for OpenHarmony 学习视频播放器开发实战 大家好&#xff01;今天带大家从零开始打造一个专为在线课程、慕课学习…...

3分钟极速攻略:ctfileGet如何一键破解城通网盘下载限速

3分钟极速攻略&#xff1a;ctfileGet如何一键破解城通网盘下载限速 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet 你是否曾因城通网盘的低速下载而焦虑&#xff1f;面对大文件的漫长等待和频繁验证码&…...

从零构建开源任务管理中枢:TaskWing部署、插件化与自动化实战

1. 项目概述&#xff1a;从零到一&#xff0c;打造你的个人任务管理中枢如果你和我一样&#xff0c;每天被各种待办事项、项目进度、临时想法和会议记录搞得焦头烂额&#xff0c;那么你肯定不止一次地想过&#xff1a;有没有一个工具&#xff0c;能真正“懂”我&#xff0c;能把…...

5大优化技巧:让ComfyUI-Manager在低配置设备上流畅运行

5大优化技巧&#xff1a;让ComfyUI-Manager在低配置设备上流畅运行 【免费下载链接】ComfyUI-Manager ComfyUI-Manager is an extension designed to enhance the usability of ComfyUI. It offers management functions to install, remove, disable, and enable various cust…...

New-API数据导出功能:轻松管理AI模型使用记录与账单数据

New-API数据导出功能&#xff1a;轻松管理AI模型使用记录与账单数据 【免费下载链接】new-api A unified AI model hub for aggregation & distribution. It supports cross-converting various LLMs into OpenAI-compatible, Claude-compatible, or Gemini-compatible for…...

ComfyUI-Impact-Pack完整安装指南:为什么你的V8版本功能不全?终极解决方案

ComfyUI-Impact-Pack完整安装指南&#xff1a;为什么你的V8版本功能不全&#xff1f;终极解决方案 【免费下载链接】ComfyUI-Impact-Pack Custom nodes pack for ComfyUI This custom node helps to conveniently enhance images through Detector, Detailer, Upscaler, Pipe, …...