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

news2024/12/23 23:20:14

文章目录

    • 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> {

    // 当前页码,默认为1
    private Integer pageNo = 1;

    // 每页显示的记录数,默认为20
    private 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 和 Setters
    public 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为BO
        SubjectInfoBO 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转换为eneity
    SubjectInfo 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转换为bo
    List<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
     */
    @Override
    public 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
     */
    @Override
    public 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 b
    where a.id = b.subject_id
      and a.is_deleted = 0
      and b.is_deleted = 0
      and 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_deleted
    from subject_info a,
         subject_mapping b
    where a.id = b.subject_id
      and a.is_deleted = 0
      and b.is_deleted = 0
      and a.subject_difficult = #{subjectInfo.subjectDifficult}
      and b.category_id = #{categoryId}
      and b.label_id = #{labelId}
    limit #{start}, #{pageSize}
</select>
5.测试

image-20240529165152208

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1870549.html

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

相关文章

8个Unity开发高手都在用的秘密技巧!

1. 不要重新发明轮子&#xff0c;使用内置的引擎工具 在使用任何引擎时&#xff0c;比如Unity或Unreal Engine&#xff0c;一些开发者&#xff0c;主要是来自计算机科学领域的开发者&#xff0c;可能会倾向于从头开始开发大型算法或结构&#xff0c;而不去了解引擎中是否已经存…

三角洲行动卡顿严重?这样快速解决三角洲行动国服卡顿问题

三角洲行动官方精心设计的游戏地图和敌人布局&#xff0c;加上“曼德尔砖”等目标导向性道具的引入&#xff0c;更是为玩家之间的竞技和争夺增添了无数的变数。每一次的争夺都如同是一场智慧与勇气的较量&#xff0c;让人热血沸腾&#xff0c;无法自拔。在这个战场上&#xff0…

免费可视化工具如何提升工作效率?

免费可视化工具能为我们的工作带来什么好处&#xff1f;在如今数据密集的工作环境中&#xff0c;如何高效地处理和展示数据成为了每个行业的重要任务。传统的工具如Excel虽然强大&#xff0c;但在处理复杂数据和创建高级图表时往往显得力不从心。而免费可视化工具的出现&#x…

Arduino - 光敏传感器

Arduino - Light Sensor Arduino - 光传感器 In this tutorial, we are going to learn: 在本教程中&#xff0c;我们将学习&#xff1a; How light sensor works 光传感器的工作原理How to connect the light sensor to Arduino 如何将光传感器连接到ArduinoHow to progra…

C#udpClient组播

一、0udpClient 控件&#xff1a; button&#xff08;打开&#xff0c;关闭&#xff0c;发送&#xff09;&#xff0c;textbox&#xff0c;richTextBox 打开UDP&#xff1a; UdpClient udp: namespace _01udpClient {public partial class Form1 : Form{public Form1(){Initi…

如何在Windows 11上设置默认麦克风和相机?这里有详细步骤

如果你的Windows 11计算机上连接了多个麦克风或网络摄像头&#xff0c;并且希望自动使用特定设备&#xff0c;而不必每次都在设置中乱动&#xff0c;则必须将首选设备设置为默认设备。我们将向你展示如何做到这一点。 如何在Windows 11上更改默认麦克风 有两种方法可以将麦克…

[游戏开发][UE5]引擎使用学习记录

C Log和蓝图Log C Log 方法 UE_Log(参数1&#xff0c;参数2&#xff0c;参数3) //举例: UE_LOG(LogTemp, Error, TEXT("Log Info: %s"),"Test Log"); 三个参数的作用 参数1&#xff1a;输出窗口归类使用&#xff0c;你写什么它就显示什么 参数2&#x…

网络安全入门必选:十款免费的抓包工具有哪些?

下面给大家推荐几款好用的免费的抓包工具软件&#xff0c;有需要的小伙伴们来了解一下。 1. Wireshark抓包分析工具 4.0.1 Wireshark是一款功能强大的网络协议分析器&#xff0c;可以实时检测和抓取网络通讯数据。它支持多种协议和媒体类型&#xff0c;并具备丰富的显示过滤…

从0-1搭建一个web项目(package.json)详解

本章分析package.json文件详解 本文主要对packge.json配置子文件详解 ObJack-Admin一款基于 Vue3.3、TypeScript、Vite3、Pinia、Element-Plus 开源的后台管理框架。在一定程度上节省您的开发效率。另外本项目还封装了一些常用组件、hooks、指令、动态路由、按钮级别权限控制等…

干货:ANR日志分析全面解析

ANR类型 出现ANR的一般有以下几种类型&#xff1a; 1:KeyDispatchTimeout&#xff08;常见&#xff09; input事件在5S内没有处理完成发生了ANR。 logcat日志关键字&#xff1a;Input event dispatching timed out 2:BroadcastTimeout 前台Broadcast&#xff1a;onReceiver在…

MYSQL 四、mysql进阶 5(InnoDB数据存储结构)

一、数据库的存储结构&#xff1a;页 索引结构给我们提供了高效的索引方式&#xff0c;不过索引信息以及数据记录都是保存在文件上的&#xff0c;确切说时存储在页结构中&#xff0c;另一方面&#xff0c;索引是在存储引擎中实现的&#xff0c;Mysql服务器上的存储引擎负责对表…

eNSP中VRRP的配置和使用

一、基础配置 1.新建拓扑图 2.配置vlan a.CORE-S1 <Huawei>system-view [Huawei]sysname CORE-S1 [CORE-S1]vlan 10 [CORE-S1-vlan10]vlan 20 [CORE-S1-vlan20]vlan 30 b.CORE-S2 <Huawei>system-view [Huawei]sysname CORE-S2 [CORE-S2]vlan 10 [CORE…

君諾外匯:为什么巴菲特现在加倍下注油气股票?油价上涨是主因吗?

近年来&#xff0c;以巴菲特为代表的一些顶级投资者开始在能源领域加大投资力度&#xff0c;特别是油气股票。这一转变引发了广泛关注&#xff0c;特别是在油价上涨的背景下。本文将Juno markets外匯深入分析巴菲特投资策略的变化原因&#xff0c;探讨其在能源市场的布局及未来…

Linux OpenGrok搭建

文章目录 一、目的二、环境三、相关概念3.1 OpenGrok3.2 CTags3.3 Tomcat 四、OpenGrok搭建4.1 安装jdk4.2 安装ctags依赖4.3 安装universal-ctags4.3.1 下载universal-ctags4.3.2 编译&&安装universal-ctags 4.4 安装Tomcat4.4.1 下载&&解压Tomcat4.4.2 启动T…

IDEA无法输入中文,怎么破

1.导航栏处&#xff0c;点击help菜单&#xff0c;选择Edit Custom VM Options.. 2.编辑文件&#xff0c;在文件末尾添加&#xff1a; -Drecreate.x11.input.methodtrue 3.保存文件即可&#xff0c;如果还是不行&#xff0c;就关闭所有Idea程序&#xff0c;重新启动Idea

Linux:进程和计划任务管理

目录 一、程序和进程 1.1、程序 1.2、进程 1.3、线程 1.4、协程 二、查看进程相关命令 2.1、ps命令&#xff08;查看静态的进程统计信息&#xff09; 第一行为列表标题&#xff0c;其中各字段的含义描述如下 2.2、top命令&#xff08;查看进程动态信息&#xff09; 2…

Session会话与请求域的区别

session会话和请求域&#xff08;也称为request域&#xff09;都是用于存储和管理用户特定信息的重要概念&#xff0c;但它们在作用范围和生命周期上有显著的不同。 请求域 (Request Domain) 作用范围&#xff1a;请求域是面向单次请求的。每次HTTP请求都会创建一个新的request…

Vue报错:Component name “xxx” should always be multi-word vue/multi-word-component

问题&#xff1a;搭建脚手架时报错&#xff0c;具体错误如下&#xff1a; ERROR in [eslint] E:\personalProject\VueProjects\vueproject2\src\components\Student.vue10:14 error Component name "Student" should always be multi-word vue/multi-word-compon…

找不到xinput1_3.dll怎么办?几种靠谱的修复xinput1_3.dll的方法

找不到xinput1_3.dll怎么办&#xff1f;如果你不知道&#xff0c;那么你就详细的看看本文吧&#xff0c;今天我们会给大家详细的讲解找不到xinput1_3.dll这个情况&#xff0c;以及分析xinput1_3.dll这个文件&#xff0c;只要我们熟悉这个文件&#xff0c;那么要搞定修复还是比较…

如何使用Hugging Face Transformers为情绪分析微调BERT?

情绪分析指用于判断文本中表达的情绪的自然语言处理(NLP)技术&#xff0c;它是客户反馈评估、社交媒体情绪跟踪和市场研究等现代应用背后的一项重要技术。情绪可以帮助企业及其他组织评估公众意见、提供改进的客户服务&#xff0c;并丰富产品或服务。 BERT的全称是来自Transfo…