当前位置: 首页 > news >正文

SpringBoot企业级开发之【文章列表(条件分页)】

我们的开发需求:

接口文档:

分析需求:

实操:

1.创建PageBean实体类

我们创建这个类是用于分页查询的,将每次的分页结果都放到这个实体类里面,然后封装成页对象去返回每次的结果

package org.huangyingyuan.pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import java.util.List;//分页返回结果对象
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PageBean <T>{private Long total;//总条数private List<T> items;//当前页数据集合
}

2.Controller

 //分页展示文章信息@GetMappingpublic Result<PageBean<Article>> list(Integer pageNum,Integer pageSize,@RequestParam(required = false)Integer categoryId,  //根据接口文档需求,该参数不需一定要传@RequestParam(required = false)String state //根据接口文档需求,该参数不需一定要传){PageBean<Article> pageBean = articleService.list(pageNum,pageSize,categoryId,state);return Result.success(pageBean);}

3.Service接口

//分页展示文章列表PageBean<Article> list(Integer pageNum, Integer pageSize, Integer categoryId, String state);

4.Service实现类

我们实现分页查询时,要先导入相关依赖

    <!--pageHelper分页插件--><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.7</version></dependency>

然后编写实现类:

//分页展示文章@Overridepublic PageBean<Article> list(Integer pageNum, Integer pageSize, Integer categoryId, String state) {//1.创建PageBean对象PageBean<Article> pageBean = new PageBean<>();//2.开启分页查询 PageHelper(依赖)PageHelper.startPage(pageNum, pageSize);//3.调用Mapper//因为每个用户的文章都不一致,所以需要根据用户ID查询Map<String, Object> map = ThreadLocalUtil.get();Integer usrId = (Integer) map.get("id");List<Article> articles = articleMapper.list(usrId, categoryId, state);//Page中提供了方法,可以获取PageHelper分页查询后,得到的总记录条数和当前页数据(所以要把我们的Page对象强转成Page<Article>)Page<Article> p =(Page<Article>)articles;//把数据填充到PageBean对象中pageBean.setTotal(p.getTotal());pageBean.setItems(p.getResult());return pageBean;}

5.Mapper

//分页查询文章List<Article> list(@Param("usrId") Integer usrId,@Param("categoryId") Integer categoryId,@Param("state") String state);

由于我们很多都是动态的查询条件,所以我们需要创建Mapper.xml映射文件才方便

Mapper.xml映射文件:

我们在resources创建于与Mapper接口路径一摸一样的文件路径,在这个文件路径下创建映射xml文件。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.huangyingyuan.mapper.ArticleMapper">  <!-- 命名空间:对应的是你的mapper接口的全路径名 --><!--动态sql--><select id="list" resultType="org.huangyingyuan.pojo.Article">SELECT * FROM article<where><if test="categoryId != null">category_id = #{categoryId}</if><if test="state != null">AND state = #{state}</if><if test="usrId != null">AND create_user = #{usrId}</if></where></select>
</mapper>

成功案例:

http://www.xdnf.cn/news/291835.html

相关文章:

  • 告别(Python)if elif else错误使用方法
  • 人工智能驱动的企业转型:战略框架与风险管理​
  • 【FPGA开发】Xilinx DSP48E2 slice 一个周期能做几次int8乘法或者加法?如何计算FPGA芯片的GOPS性能?
  • Python项目源码60:电影院选票系统1.0(tkinter)
  • C++ 运算符重载详解:赋予自定义类型原生操作的能力
  • PHP数组排序深度解析:sort()、rsort()、asort()、arsort()、ksort()、krsort() 的适用场景与性能对比
  • 责任链模式(Chain of Responsibility Pattern)
  • SpringCloud多环境配置的一些问题
  • 如何解析CAN报文物理值是负数的信号
  • 如何选择适合自己的LLM
  • 互联网大厂Java求职面试:高并发系统设计与架构实战
  • LeetCode热题100--189.轮转数组--中等
  • 人工智能应用:从技术突破到生态重构的演进之路
  • 【datawhaleAI春训营】楼道图像分类
  • 标题:试验台铁地板:革新之路
  • ARM子程序和栈
  • 第18章:赤色世界:文明的分支与新纪元
  • 雷电模拟器-超好用的Windows安卓模拟器
  • 以太网协议(IEEE 802.3)
  • 数据类型:String
  • 低功耗蓝牙BLE的通信可靠性分析
  • 内存碎片深度剖析
  • 多图详解VSCode搭建Python开发环境
  • BC8 十六进制转十进制
  • Vite 的工作流程
  • 大模型推理框架简介
  • 算法每日一题 | 入门-顺序结构-上学迟到
  • Linux 系统的指令详解介绍
  • 数据融合(Data Fusion)的概念与核心思想
  • DeepSeek-Prover-V2,DeepSeek推出的开源数学推理大模型