【第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 {@AutowiredArticleService articleService;@PostMapping/*** 文章列表查询* @return Result<List<Article>>*/@GetMappingpublic 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 {@AutowiredArticleMapper articleMapper;@Overridepublic 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 {@AutowiredArticleService 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 {@AutowiredArticleMapper articleMapper;@Overridepublic 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 {@AutowiredArticleService articleService;/*** 文章更新* @param article 文章* @return Result*/@PutMappingpublic 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 {@AutowiredArticleMapper articleMapper;@Overridepublic 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 {@AutowiredArticleService articleService;/*** 文章删除* @param id 编号* @return Result*/@DeleteMappingpublic 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 {@AutowiredArticleMapper articleMapper;@Overridepublic 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 {@AutowiredArticleService 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 {@AutowiredArticleMapper 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;//封面图像@ArticleStateprivate String state;//发布状态 已发布|草稿private Integer categoryId;//文章分类idprivate 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 {/*** 添加分页插件*/@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); // 如果配置多个插件, 切记分页最后添加// 如果有多数据源可以不配具体类型, 否则都建议配上具体的 DbTypereturn 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. 结果

在这里插入图片描述


总结

回到顶部

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

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

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

相关文章

医疗器械网络安全风险管理的基本步骤

医疗器械网络安全风险管理是一个复杂的过程&#xff0c;涉及到多个环节和步骤。以下是一些基本的步骤和关键点&#xff1a; 风险识别&#xff1a;首先需要对医疗器械的软件、网络连接和通信协议等进行漏洞分析&#xff0c;识别潜在的安全漏洞和弱点。这可能涉及对设备的渗透测…

MbedTLS源码跨平台编译(window/macos/linux)

1.window平台编译: 克隆: git clone --recursive https://github.com/Mbed-TLS/mbedtls.git 克隆成功 添加OpenSSL环境变量 验证环境 使用cmake编译 cmake ../生成配置时出错 出现上面原因是克隆下来的library与programs及tests目录少文件了,直接下载zip包替换library目录

docker pull image 报错 dial tcp 31.13.88.169:443: i/o timeout

一、错误重现 error pulling image configuration: download failed after attempts6: dial tcp 31.13.88.169:443: i/o timeout 在执行docker build构建镜像&#xff0c;拉取镜像时报错 或者直接docker pull镜像时报错 实质都是拉取镜像源超时报错&#xff0c;那么就是镜像源…

Java sql中 >、<、≥、≤ 等的转义字符 代替符号

Java中写sql会遇到一些 >、<、≥、≤ 符号转化问题&#xff0c;导致sql语句无法运行。 替代方法如下&#xff1a; 第一种方法&#xff1a; < &#xff1a; < < &#xff1a; < > &#xff1a; > > &#xff1a; > sql示例如下&#x…

IEDA 默认集成依赖概述

IEDA 默认集成依赖概述 目录概述需求&#xff1a; 设计思路实现思路分析 1.Developer Tools:GraalVM Native supportGraphQL DGs Code GenerationSpring Boot DevToolsLombokSpring Configuration ProcessorDocker Compose supportSpring Modulith 2.WebWebSpring WebSpring Re…

详解 Flink 的 window API

一、window 概述 ​ Streaming 流式计算是一种被设计用于处理无限数据集的数据处理引擎&#xff0c;而无限数据集是指一种不断增长的本质上无限的数据集&#xff0c;而 Flink window 是一种将无限数据切割为有限块进行处理的手段。window 是无限数据流处理的核心&#xff0c; …

单片机原理及技术(三)—— AT89S51单片机(二)(C51编程)

一、AT89S51单片机的并行I/O端口 1.1 P0口 AT89S51的P0口是一个通用的I/O口&#xff0c;可以用于输入和输出。每个引脚都可以通过软件控制为输入或输出模式。 1.1.1 P0口的工作原理 P0口的工作原理是通过对P0寄存器的读写操作来控制P0口的引脚。 输出模式&#xff1a;当P0口…

UI学习笔记(一)

UI学习 一&#xff1a;UIView基础frame属性隐藏视图对象&#xff1a;UIView的层级关系 二&#xff1a;UIWindow对象三&#xff1a;UIViewController基础UIViewController使用 四&#xff1a;定时器与视图移动五&#xff1a;UISwitch控件六&#xff1a;滑动条和进度条七&#xf…

2021年vue面试题整理(万字解析)

一、对MVVM的理解 MVVM分为Model、View、ViewModel。 Model 代表数据模型&#xff0c;数据和业务逻辑都在Model层中定义&#xff1b;泛指后端进行的各种业务逻辑处理和数据操控&#xff0c;对于前端来说就是后端提供的 api 接口。 View 代表UI视图&#xff0c;负责数据的展示…

【Python数据分析--Numpy库】Python数据分析Numpy库学习笔记,Python数据分析教程,Python数据分析学习笔记(小白入门)

一&#xff0c;Numpy教程 给大家推荐一个很不错的笔记&#xff0c;个人长期学习过程中整理的 Python超详细的学习笔记共21W字点我获取 1-1 安装 1-1-1 使用已有的发行版本 对于许多用户&#xff0c;尤其是在 Windows 上&#xff0c;最简单的方法是下载以下的 Python 发行版…

Swift 序列(Sequence)排序面面俱到 - 从过去到现在(一)

概览 在任何语言中对序列(或集合)元素的排序无疑是一种司空见惯的常规操作,在 Swift 语言里自然也不例外。序列排序看似简单,实则“暗藏玄机”。 要想真正掌握 Swift 语言中对排序的“各种姿势”,我们还得从长计议。不如就先从最简单的排序基本功开始聊起吧。 在本篇博…

【十大排序算法】插入排序

插入排序&#xff0c;如一位细心的整理者&#xff0c; 她从序列的左端开始&#xff0c; 挨个将元素归位。 每当她遇到一个无序的元素&#xff0c; 便将它插入已经有序的部分&#xff0c; 直至所有元素有序排列。 她不张扬&#xff0c;却有效率&#xff0c; 用自己的方式&…

pdf文件在线压缩网站,pdf文件在线压缩工具软件

在数字化时代的今天&#xff0c;PDF文件已经成为我们日常生活和工作中不可或缺的一部分。然而&#xff0c;随着PDF文件的广泛使用&#xff0c;其文件大小问题也日益凸显。过大的PDF文件不仅占用了大量的存储空间&#xff0c;而且在传输和共享过程中也往往面临诸多不便。因此&am…

SylixOS网卡多 IP 配置

概述 网卡多 IP 是指在同一个网络接口上配置和绑定多个 IP 地址。 引进网卡多 IP 的目的主要有以下几个&#xff1a; 提供服务高可用性。通过在同一接口绑定多个 IP 地址&#xff0c;然后在服务端使用这些 IP 地址启动多个服务实例。这样在任意一 IP 出现问题时&#xff0c;可…

Redis学习(十二)Redis的三种删除策略

目录 一、背景二、Redis 的三种删除策略2.1 定时删除&#xff08;用CPU换内存空间&#xff09;2.2 定期删除2.3 惰性删除&#xff08;用内存换CPU性能&#xff09; 三、总结 一、背景 我们都知道 Redis 是一种内存数据&#xff0c;所有的数据均存储在内存中&#xff0c;可以通…

Android 代码打印meminfo

旨在替代adb shell dumpsys meminfo packageName&#xff0c;在log打印meminfo&#xff0c;以便分析内存情况 ActivityManager.MemoryInfo memoryInfo new ActivityManager.MemoryInfo(); activityManager.getMemoryInfo(memoryInfo); long totalMemory Runtime.getRuntime(…

大数据环境搭建@Hive编译

Hive3.1.3编译 1.编译原因1.1Guava依赖冲突1.2开启MetaStore后运行有StatsTask报错1.3Spark版本过低 2.环境部署2.1jdk安装2.2maven部署2.3安装图形化桌面2.4安装Git2.5安装IDEA 3.拉取Hive源码4.Hive源码编译4.1环境测试1.测试方法——编译2.问题及解决方案&#x1f4a5;问题1…

【设计模式】结构型-装饰器模式

在代码的海洋深处迷离&#xff0c;藏匿着一片神奇之地。那里有细腻的线条交错&#xff0c;是装饰器的奇妙艺术。 文章目录 一、登录的困境二、装饰器模式三、装饰器模式的核心组成部分四、运用装饰器模式五、装饰器模式的应用场景六、小结推荐阅读 一、登录的困境 假设我们有…

YOLOv5改进总目录 | backbone、Neck、head、损失函数,注意力机制上百种改进技巧

&#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏地址&#xff1a; YOLOv5改进入门——持续更新各种有效涨点方法 点击即可跳转 报错 解决Yolov5的RuntimeError: result type Float can…

qq号码采集软件

寅甲QQ号码采集软件, 一款采集QQ号、QQ邮件地址&#xff0c;采集QQ群成员、QQ好友的软件。可以按关键词采集&#xff0c;如可以按地区、年龄、血型、生日、职业等采集。采集速度非常快且操作很简单。