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

成功案例:

相关文章:

  • 利用 Python pyttsx3实现文字转语音(TTS)
  • 如何使用QWidgets设计一个类似于Web Toast的控件?
  • js获取明天日期、Vue3大菠萝 Pinia的使用
  • Unity:Surface Effector 2D(表面效应器 2D)
  • C++入门(上)--《Hello C++ World!》(1)(C/C++)
  • 学习海康VisionMaster之亮度测量
  • 【Bootstrap V4系列】学习入门教程之 组件-按钮组(Button group)
  • Spring 框架的底层原理
  • linux 高并发 文件句柄数 fs 及 tcp端口数调优
  • 【心海资源】telegram换U地址完整源码
  • 【算法学习】递归、搜索与回溯算法(一)
  • # 部署深度学习模型:Flask API 服务端与客户端通信实战
  • 手写 Vue 源码 === reactive 方法
  • Vim 命令从头学习记录
  • Java设计模式: 工厂模式与策略模式
  • 使用 JavaScript 实现数据导出为 Excel 和 CSV 文件
  • #基础Machine Learning 算法(上)
  • 大模型微调Fine-tuning:从概念到实践的全面解析
  • LeetCode算法题 (反转链表)Day17!!!C/C++
  • Excel VBA 自定义函数
  • 苏丹宣布与阿联酋断交
  • 马斯克的胜利?OpenAI迫于压力放弃营利性转型计划
  • “鱼米之乡”江苏兴化的产业哲学:以融合与创新重构价值链条
  • 国铁集团:铁路五一假期旅客发送量累计已超1亿人次
  • 苏杯登顶看到老将新人冲劲,国羽用冠军为奥运新周期开好头
  • 人民日报和音:引领新时代中俄关系坚毅前行