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

http://www.lryc.cn/news/385296.html

相关文章:

  • 每天一个项目管理概念之WBS
  • linux安装mysql8并查看密码
  • [渗透测试] 任意文件读取漏洞
  • sudo: /etc/init.d/ssh: command not found
  • 秋招倒计时?到底需要准备到什么程度?
  • 6.26.4.1 基于交叉视角变换的未配准医学图像多视角分析
  • 62.指针和二维数组(2)
  • 学生表的DDL和DML
  • 视觉灵感的探索和分享平台
  • 使用 Reqable 在 MuMu 模拟器进行App抓包(https)
  • RedisConnectionException: Unable to connect to localhost/<unresolved>:6379
  • poi word写入图片
  • 【监控】2.Grafana的安装
  • Java入门教程(上)
  • 【Linux】Linux下使用套接字进行网络编程
  • 强化学习-Q-learning、SARSA和PPO等算法
  • HarmonyOS SDK助力鸿蒙原生应用“易感知、易理解、易操作”
  • Java基础入门day72
  • 文本编辑命令和正则表达式
  • 云手机群控功能讲解
  • gdb用法
  • 聊一聊UDF/UDTF/UDAF是什么,开发要点及如何使用?
  • 配置Nginx二级域名
  • LeetCode——判断回文数
  • shell:使用结构化语句(for、while循环)
  • 数据结构_绪论
  • AI自动生成角色和情节连续的漫画,中山大学联想提出AutoStudio,可以多轮交互式连续生成并保持主题一致性。
  • 【经典面试题】RabbitMQ如何防止重复消费?
  • 如何自己录制教学视频?零基础也能上手
  • 【android】用 ExpandableListView 来实现 TreeView树形菜单视图