【第11章】SpringBoot实战篇之文章(下)含条件分页

文章目录

  • 前言
  • 一、文章列表查询
    • 1. ArticleController
    • 2. ArticleService
  • 二 、文章查询
    • 1. ArticleController
    • 2. ArticleService
  • 三、文章更新
    • 1. ArticleController
    • 2. ArticleService
  • 四、文章删除
    • 1. ArticleController
    • 2. ArticleService
  • 五、文章列表查询(条件分页)
    • 1.ArticleController
    • 2.ArticleService
    • 3. Article
    • 4. MybatisPlusConfig
    • 5. sql
    • 6. 结果
  • 总结


前言

本章内容继续介绍文章,下面介绍

  • 文章列表查询
  • 文章查询
  • 文章更新
  • 文章删除
  • 文章列表查询(条件分页)

一、文章列表查询

1. ArticleController

@RestController
@RequestMapping("/article")
public class ArticleController {
    @Autowired
    ArticleService articleService;
    @PostMapping
    /**
     * 文章列表查询
     * @return Result<List<Article>>
     */
    @GetMapping
    public Result<List<Article>> queryList(){
        List<Article> categories = articleService.selectList();
        return Result.success(categories);
    }
}

2. ArticleService

public interface ArticleService {
    public List<Article> selectList();
}
@Service
public class ArticleServiceImpl implements ArticleService {
    @Autowired
    ArticleMapper articleMapper;
    @Override
    public List<Article> selectList() {
        Map<String, Object> claims = ThreadLocalUtil.get();
        Integer userId = (Integer) claims.get("userId");
        QueryWrapper<Article> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("create_user",userId);
        return articleMapper.selectList(queryWrapper);
    }
}

二 、文章查询

1. ArticleController

@RestController
@RequestMapping("/article")
public class ArticleController {
    @Autowired
    ArticleService articleService;
    /**
     * 文章查询
     * @param id 编号
     * @return Article
     */
    @GetMapping("detail")
    public Result<Article> detail(Integer id){
        Article categories = articleService.selectOne(id);
        return Result.success(categories);
    }
}

2. ArticleService

public interface ArticleService {
    public Article selectOne(Integer id);
}
@Service
public class ArticleServiceImpl implements ArticleService {
    @Autowired
    ArticleMapper articleMapper;
    @Override
    public Article selectOne(Integer id) {
        Map<String, Object> claims = ThreadLocalUtil.get();
        Integer userId = (Integer) claims.get("userId");
        QueryWrapper<Article> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("id",id);
        queryWrapper.eq("create_user",userId);
        return articleMapper.selectOne(queryWrapper);
    }
}

三、文章更新

1. ArticleController

@RestController
@RequestMapping("/article")
public class ArticleController {
    @Autowired
    ArticleService articleService;
    /**
     * 文章更新
     * @param article 文章
     * @return Result
     */
    @PutMapping
    public Result update(@RequestBody @Validated(ValidatedGroups.Update.class) Article article){
        int i = articleService.update(article);
        if(i!=1){
            return Result.error("更新文章失败");
        }
        return Result.success("更新文章成功");
    }
}

2. ArticleService

public interface ArticleService {
    public int update(Article article);
}
@Service
public class ArticleServiceImpl implements ArticleService {
    @Autowired
    ArticleMapper articleMapper;
    @Override
    public int update(Article article) {
        Map<String, Object> claims = ThreadLocalUtil.get();
        Integer userId = (Integer) claims.get("userId");
        UpdateWrapper<Article> wrapper = new UpdateWrapper<>();
        wrapper.set("update_time",LocalDateTime.now());
        wrapper.eq("id",article.getId());
        wrapper.eq("create_user",userId);
        return articleMapper.update(article,wrapper);
    }
}

四、文章删除

1. ArticleController

@RestController
@RequestMapping("/article")
public class ArticleController {
    @Autowired
    ArticleService articleService;
    /**
     * 文章删除
     * @param id 编号
     * @return Result
     */
    @DeleteMapping
    public Result delete(Integer id){
        int i = articleService.delete(id);
        if(i!=1){
            return Result.error("删除文章失败");
        }
        return Result.success("删除文章成功");
    }
}

2. ArticleService

public interface ArticleService {
    public int delete(Integer id);
}
@Service
public class ArticleServiceImpl implements ArticleService {
    @Autowired
    ArticleMapper articleMapper;
    @Override
    public int delete(Integer id) {
        Map<String, Object> claims = ThreadLocalUtil.get();
        Integer userId = (Integer) claims.get("userId");
        UpdateWrapper<Article> wrapper = new UpdateWrapper<>();
        wrapper.eq("id",id);
        wrapper.eq("create_user",userId);
        return articleMapper.delete(wrapper);
    }
}

五、文章列表查询(条件分页)

这里有点技术含量,稍微介绍下,我们使用Mybatis-Plus提供的分页插件,参考这里

1.ArticleController

@RestController
@RequestMapping("/article")
public class ArticleController {
    @Autowired
    ArticleService articleService;
    /**
     * 文章列表查询(条件分页)
     * @param pageNum 当前页
     * @param pageSize 页数
     * @param categoryId 分类id
     * @param state 发布状态
     * @return Result<ObjectMapper>
     */
    @GetMapping("/page")
    public Result<Map<String,Object>> selectPage(Integer pageNum, Integer pageSize, @RequestParam(required = false) Integer categoryId,@RequestParam(required = false) String state) throws JsonProcessingException {
        Page<Article> articlePage = articleService.selectPage(pageNum, pageSize, categoryId, state);
        Map<String,Object> map=new HashMap<>();
        map.put("total",articlePage.getTotal());
        map.put("items",articlePage.getRecords());
        return Result.success(map);
    }
}

2.ArticleService

public interface ArticleService {
    public Page<Article> selectPage(Integer current, Integer size, Integer categoryId, String state);
}
@Service
public class ArticleServiceImpl implements ArticleService {
    @Autowired
    ArticleMapper articleMapper;
    public Page<Article> selectPage(Integer current,Integer size,Integer categoryId,String state) {
        Map<String, Object> claims = ThreadLocalUtil.get();
        Integer userId = (Integer) claims.get("userId");
        QueryWrapper<Article> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("create_user",userId);
        if(categoryId!=null){
            queryWrapper.eq("category_id",categoryId);
        }
        if(StringUtils.hasLength(state)){
            queryWrapper.eq("state",state);
        }
        Page<Article> articlePage = new Page<>(current,size);
        return articleMapper.selectPage(articlePage,queryWrapper);
    }
}

3. Article

@Getter
@Setter
@ToString
public class Article {
    @NotNull(message = "id不能为空",groups = {ValidatedGroups.Update.class})
    @TableId(type = IdType.AUTO)
    private Integer id;//主键ID
    @Pattern(regexp = "^\\S{1,10}$",message = "文章标题为1-10个字符")
    @NotEmpty(message = "文章标题不能为空")
    private String title;//文章标题
    @NotEmpty(message = "文章内容不能为空")
    private String content;//文章内容
    @Pattern(regexp = "^(https?:\\/\\/)?([\\da-z\\.-]+)\\.([a-z\\.]{2,6})([\\/\\w \\.-]*)*\\/?$",message = "封面图像格式应为http链接")
    private String coverImg;//封面图像
    @ArticleState
    private String state;//发布状态 已发布|草稿
    private Integer categoryId;//文章分类id
    private Integer createUser;//创建人ID
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;//创建时间
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;//更新时间
}

4. MybatisPlusConfig

package org.example.springboot3.mybatisplus.config;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * Create by zjg on 2024/5/29
 */
@Configuration
public class MybatisPlusConfig {

    /**
     * 添加分页插件
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); // 如果配置多个插件, 切记分页最后添加
        // 如果有多数据源可以不配具体类型, 否则都建议配上具体的 DbType
        return interceptor;
    }
}

5. sql

[2024-05-29 22:43:45.345][http-nio-8080-exec-5][DEBUG]- org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:135) - ==>  Preparing: SELECT id,title,content,cover_img,state,category_id,create_user,create_time,update_time FROM article WHERE (create_user = ? AND category_id = ? AND state = ?) LIMIT ?
[2024-05-29 22:43:45.345][http-nio-8080-exec-5][DEBUG]- org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:135) - ==> Parameters: 1(Integer), 2(Integer), 草稿(String), 3(Long)
[2024-05-29 22:43:45.348][http-nio-8080-exec-5][DEBUG]- org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:135) - <==      Total: 3

6. 结果

在这里插入图片描述


总结

回到顶部

最初的梦想,就像好好睡了一觉,直到天亮。

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

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

相关文章

离散数学---树

目录 1.基本概念及其相关运用 2.生成树 3.有向树 4.最优树 5.前缀码 1.基本概念及其相关运用 &#xff08;1&#xff09;无向树&#xff1a;连通而且没有回路的无向图就是无向树&#xff1b; 森林就是有多个连通分支&#xff0c;每个连通分支都是树的无连通的无向图&…

QGraphicsView实现简易地图20『鹰眼视图-全图显示』

前文链接&#xff1a;QGraphicsView实现简易地图19『迁徙图』 鹰眼视图-全图显示 能够显示所有已加载的瓦片地图&#xff0c;支持当前视口的范围显示器。鼠标在鹰眼视图上移动时&#xff0c;支持是否干预主视图地图加载两种模式&#xff0c;即移动时是否让主视图加载空白处的瓦…

揭秘800G以太网——简介

什么是800G以太网&#xff1f; 800G以太网是一种高带宽以太网标准&#xff0c;每秒可传输800 Gbps&#xff08;千兆位每秒&#xff09;的数据速率。它代表了以太网技术的又一进步&#xff0c;旨在满足不断增长的数据传输需求以及处理大量数据的能力。因此&#xff0c;800G以太…

翻译软件就用DT浏览器

翻译软件就用DT浏览器

【纯干货】深度学习各算法的优缺点和适用场景!建议收藏。(上篇)

. .纯 干 货 . 目录 前馈神经网络 1、梯度下降&#xff08;Gradient Descent&#xff09; 2、随机梯度下降&#xff08;Stochastic Gradient Descent, SGD&#xff09; 3、小批量梯度下降&#xff08;Mini-batch Gradient Descent&#xff09; 4、动量&#xff08;Mo…

【CSS】opacity 父元素设置透明度影响子元素显示效果解决方案

<div class"father"><div class"children"></div> </div>.father{background:#000000,opacity:0.6 } 给父元素设置透明度时&#xff0c;子元素显示效果会搜到父元素透明度的影响&#xff0c;如下图 解决方法&#xff1a; .fathe…

【纯血鸿蒙】——响应式布局如何实现?

前面介绍了自适应布局&#xff0c;但是将窗口尺寸变化较大时&#xff0c;仅仅依靠自适应布局可能出现图片异常放大或页面内容稀疏、留白过多等问题。此时就需要借助响应式布局能力调整页面结构。 响应式布局 响应式布局是指页面内的元素可以根据特定的特征&#xff08;如窗口…

展厅设计中的不同区域划分

1、公共区域 公共区域一般来说是不受限制的区域&#xff0c;这种情况下&#xff0c;会使我们想到的区域是大厅、售卖区、视频播放等&#xff0c;这些公共区域的相关设施比较完善&#xff0c;只是需要普通的安全保护设施及警报设备即可。 2、展览区域 展览区域是参观者能够触及到…

【Car Guide.2】Basic Knowledge

文章目录 【History】【投诉榜】【油 VS 电】【三元锂 vs 磷酸铁锂】【本田、丰田、大众】飞度 【杂谈】 【History】 法国&#xff0c;标志&#xff0c;雪铁龙 美国&#xff0c;通用集团&#xff0c;有别克&#xff08;GL8)&#xff0c;凯迪拉克&#xff0c;雪佛兰&#xff…

Unity3d简单对话系统的实现——使用Dialogue editor完成对话系统

目录 前言 使用方法 1.下载dialogue editor 2.新建空物体 3.对对话内容进行编辑 4.对话画布建立 5.触发对话框代码 结束语 前言 今天是坚持写博客的第21天&#xff0c;很高兴自己可以坚持&#xff0c;也希望能与大家一起进步。我们今天来看unity3d当中的一个可以轻松实…

高通CSIPHY combo mode介绍

目录 使用MIPI Switch 使用高通平台CSIPHY的Combo Mode YYYY使用Combo Mode电路图如下: 如何设置combo PHY mode CSIInfo configuration when camera works in normal mode 平台SoC一般都有多个CSIPHY以满足当前手机相机设计多摄的情况,但是一款SoC CSIPHY的个数也是一定…

使用Aspose技术将Excel/Word转换为PDF

简介&#xff1a;本文将介绍如何使用Aspose技术将Excel文件转换为PDF格式。我们将使用Aspose-Cells-8.5.2.jar包&#xff0c;并演示Java代码以及进行测试。 一、Aspose技术概述 Aspose是一款强大的文档处理库&#xff0c;支持多种编程语言&#xff0c;如Java、C#、Python等。…

C++ | Leetcode C++题解之第137题只出现一次的数字II

题目&#xff1a; 题解&#xff1a; class Solution { public:int singleNumber(vector<int>& nums) {int a 0, b 0;for (int num: nums) {b ~a & (b ^ num);a ~b & (a ^ num);}return b;} };

融云:应用出海新增长引擎,GPT-4o 后的 AI 创新与用户运营

近日&#xff0c;融云与 TikTok、维卓联合在京举办了“十年出海&#xff0c;遇上 AI”私享会。 会上&#xff0c;融云解决方案架构师于洪达带来了《应用出海新增长引擎&#xff0c;AI 创新与用户精细化运营》主题分享&#xff0c;探讨在 AI 技术大潮下应用出海通过创新运营方式…

【C++进阶】深入STL之list:模拟实现深入理解List与迭代器

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ ⏩收录专栏⏪&#xff1a;C “ 登神长阶 ” &#x1f921;往期回顾&#x1f921;&#xff1a;初步了解 list &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀STL之list &#x1f4d2;1. list…

Java | Leetcode Java题解之第132题分割回文串II

题目&#xff1a; 题解&#xff1a; class Solution {public int minCut(String s) {int n s.length();boolean[][] g new boolean[n][n];for (int i 0; i < n; i) {Arrays.fill(g[i], true);}for (int i n - 1; i > 0; --i) {for (int j i 1; j < n; j) {g[i]…

nvm,node不是内部命令,npm版本不支持问题(曾经安装过nodejs)

nvm安装后nvm -v有效&#xff0c;node指令无效 环境变量配置无问题 推荐方案 下载你需要的node版本 Index of /dist/ (nodejs.org) 下载后解压到你的nvm存储版本的位置 cmd进入切换你的使用版本&#xff08;此时你的nodejs是从网上下载的&#xff0c;npm文件是存在的&…

基于SSM+Jsp的高校信息资源共享平台

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

lua vm 五: upvalue

前言 在 lua vm 中&#xff0c;upvalue 是一个重要的数据结构。upvalue 以一种高效的方式实现了词法作用域&#xff0c;使得函数能成为 lua 中的第一类值&#xff0c;也因其高效的设计&#xff0c;导致在实现上有点复杂。 函数 (proto) upvalue 构成了闭包&#xff08;closu…

数据结构(C语言)之对归并排序的介绍与理解

目录 一归并排序介绍&#xff1a; 二归并排序递归版本&#xff1a; 2.1递归思路&#xff1a; 2.2递归代码实现&#xff1a; 三归并排序非递归版本&#xff1a; 3.1非递归思路&#xff1a; 3.2非递归代码实现&#xff1a; 四归并排序性能分析&#xff1a; 欢迎大佬&#…