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

文章目录

    • 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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

信息学奥赛初赛天天练-37-CSP-J2021阅读程序-质数、合数、约数、约数个数、约数和、增加质因数对约数个数、约数和的影响

PDF文档公众号回复关键字:20240627 质数 质数和合数是数学中对于自然数&#xff08;不包括0和1&#xff09;的两种重要分类 质数 (Prime Number) 一个大于1的自然数&#xff0c;除了1和它本身以外不再有其他因数的数称为质数 例如 2、3、5、7、11、13、17、19等都是质数 …

从RLHF到DPO再到TDPO,大模型对齐算法已经是「token-level」

在人工智能领域的发展过程中&#xff0c;对大语言模型&#xff08;LLM&#xff09;的控制与指导始终是核心挑战之一&#xff0c;旨在确保这些模型既强大又安全地服务于人类社会。早期的努力集中于通过人类反馈的强化学习方法&#xff08;RLHF&#xff09;来管理这些模型&#x…

【深度学习】python之人工智能应用篇--跨模态生成技术

跨模态生成技术概述 跨模态生成技术是一种将不同模态的数据&#xff08;如文本、图像、音频、视频等&#xff09;进行融合和转换的技术。其目标是通过将一个模态的数据作为输入&#xff0c;生成与之对应的另一个模态的输出。这种技术对于突破单一模态的局限性&#xff0c;提高…

数据库怎么同步

数据库要怎么同步呢&#xff0c;有很多方法&#xff0c;看你用什么数据库&#xff0c;如果是Sqlserver,你要数据库同步&#xff0c;那么可以使用自带的订阅发布&#xff0c;订阅发布应该是不错的方法&#xff0c;但是我上次要配置双向同步&#xff0c;它的对等发布好像没部署成…

力扣-和为K的子数组

题目-和为 K 的子数组 解法1&#xff1a;两层for循环 public class T560 {public static int subarraySum(int[] nums, int k) {int res 0;for (int i 0; i < nums.length; i) {int tempSum 0;for (int j i; j < nums.length; j) {tempSum nums[j];if (tempSum k)…

JetBrains IDEA 2024 无线重置免费 试用

注意&#xff1a;该文档只作为参考&#xff0c;若涉及到版权问题&#xff0c;请官方购买正版软件 Idea的使用&#xff0c;不是免费的。需要自己购买&#xff0c;获取证书才能使用&#xff0c;那么怎么无限试用30天呢&#xff1f; 免费试用操作&#xff1a; 文件删除 删除C:\…

揭秘数据合并的秘密:一文掌握一对一、多对一、多对多合并技巧与实战!

使用pd.merge()合并 类似 MySQL 中表和表直接的合并merge与concat的区别在于,merge需要依据某一共同的行或列来进行合并使用pd.merge()合并时,会自动根据两者相同column名称的那一列,作为key来进行合并每一列元素的顺序不要求一致1. 一对一合并 df1 = pd.DataFrame({"…

软考系统架构师系统工程与信息系统基础考点

软考系统架构师系统工程与信息系统基础考点 系统工程 定义&#xff1a;一种组织管理技术&#xff0c;一种现代的科学决策方法 目的&#xff1a;以最好的方式实现系统 目标&#xff1a;整体最优 意义&#xff1a;利用计算机为工具&#xff0c;对系统的结构、元素、信息和反馈…

2024黑盾杯复现赛题MISC部分

一、一个logo 一张png图片&#xff0c;查看颜色通道即可发现flag 二、 学会Office 最好用联想自带的excel工具查看&#xff0c;我用WPS打开未解出题目 这里会发现有隐藏信息 隐藏信息为宏加密 。去百度了解宏加密后&#xff0c;发现有俩个宏&#xff0c;一个加密一个解密 执…

LeetCode刷题之HOT100之课程表

吃完普通的食堂饭菜&#xff0c;回到实验室&#xff0c;继续做一道题&#xff01; 1、题目描述 2、逻辑分析 这道题涉及到图相关知识&#xff0c;应用到了拓扑排序。 题意解释 一共有 n 门课要上&#xff0c;编号为 0 ~ n-1。先决条件 [1, 0]&#xff0c;意思是必须先上课 0…

不止是只有维度建模,数据仓库还有Data Vault建模

引言 在数据仓库设计中&#xff0c;传统的星型和雪花型模型有着各自的优势和劣势。随着数据量的增大和数据源的多样化&#xff0c;Data Vault&#xff08;数据仓库&#xff09;建模方法逐渐受到关注和应用。Data Vault建模是一种灵活、可扩展、适应性强的建模方法&#xff0c;…

flash申请内存失败,导致老化问题解决

背景 在闪光灯初始化阶段客制化了一个buffer&#xff0c;下发到kernel的闪光灯驱动中用于保存读取闪光灯寄存器的值。功能测试都是正常的&#xff0c;但是一旦开始批量跑产线老化测试会有1/4500左右概率的后主摄拍照卡住。定位根因是闪光灯初始化失败&#xff0c;进一步原因就…

记一次ndk版本升级

概述 事情的起因是做一次android版本的业务迭代&#xff0c;发现程序crash掉了。经过分析&#xff0c;原因是中台部门对libc_shared.so库进行了升级&#xff0c;正好我们的业务也会用到libc_shared.so库&#xff0c;导致两个库版本冲突。具体crash的原因可以参见参考文献1。 …

Coldrage Dagger

剃刀高地【寒怒匕首 Coldrage Dagger】 2020.11.26.剃刀高地刷【寒怒匕首】-1_网络游戏热门视频 2020.11.26.剃刀高地刷【寒怒匕首】-2_网络游戏热门视频

【M365运维】Outlook和Teams里不显示用户的组织架构

【问题】 由于一些误操作&#xff0c;把用户账户禁用并重新启用后&#xff0c;发现在Outlook和Teams里无法查看用户的组织结构图了。如下图所示&#xff1a; - 在Outlook 里&#xff0c;用户标签页的组织一直显示“正在加载..."&#xff0c;成员身份也是“找不到任何组。…

【项目实训】数据库内容丰富

经团队讨论&#xff0c;对前端页面展示数据进行了增加&#xff0c;于是相应的修改数据库 经团队成员使用大模型对各公司面试经验中问题的总结优化&#xff0c;我们打算将大模型的回答存储到数据库中&#xff0c;以显示在前端页面 于是在数据库中存储大模型的回答&#xff1a;…

同三维T700转换器 USB转HDMI转换器

让USB摄像头变成HDMI输出&#xff0c;支持4K60输出 一、产品简介&#xff1a; 此转换器可以把USB信号转成HDMI信号&#xff0c;支持4K60 HDMI输出&#xff0c;有效解决了USB摄像头连接电视、显示器、导播台的问题&#xff0c;带USB控制口&#xff0c;可升级/接蓝牙接收器&#…

【微服务网关——hystrix-go类库】

1.hystrix-go类库 hystrix-go 是 Netflix 开源的 Hystrix 库在 Go 语言中的实现&#xff0c;用于处理服务中的故障和延迟问题。它通过提供熔断器&#xff08;Circuit Breaker&#xff09;、隔离、降级、限流、以及实时监控等机制&#xff0c;帮助开发者构建健壮的分布式系统。…

初学51单片机之长短键应用定时炸弹及扩展应用

51单片机RAM区域划分 51单片机的RAM分为两个部分&#xff0c;一块是片内RAM&#xff0c;一块是片外RAM。 data&#xff1a; 片内RAM从 0x00 ~0x7F 寻址范围&#xff08;0-127&#xff09; 容量共128B idata: 片外RAM从 0x00~0xFF 寻址范围(0-255) 容量共256B pdata&am…

ADC位数、增益调制与参考电压

位数&#xff1a;12bit、10bit、8bit 一般就是对应的ADC值分别为&#xff1a;4095、1023、255&#xff0c;也就选用对应位数时ADC的最大值。 增益的作用 增益设置用于放大或缩小输入信号&#xff0c;使其适配到ADC的输入范围。增益设置可以通过配置SAADC的通道配置寄存器来实…