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

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...