springboot实战(17)(“大事件“——新增文章主体逻辑)

devtools/2024/11/25 14:13:50/

目录

一、新增文章涉及的数据表、实体类。

(1)表结构。

(2)实体类(Article)

二、接口文档分析。

(1)请求方式与请求路径。

(2)请求参数。

(3)响应数据。

三、具体分析与实现。

(1)各层实现的分析。

1、controller层。

2、service、mapper层。

(2)具体代码。

1、ArticleController层。

2、ArticleService层。

3、ArticleServiceImpl实现类。

4、ArticleMapper层。

(3)后端接口测试。(postman)

(4)问题与分析。


一、新增文章涉及的数据表、实体类。

(1)表结构。
  • article:文章表。

  • id(主键)
  • title(文章标题)
  • content(文章正文)
  • cover_img(文章封面:存的是图片地址。而图片的数据存放在阿里云的服务器)
  • state(文章状态:已发布/草稿)
  • category_id(文章分类id:文章分类表的主键。表示该文章是属于哪种类别:如军事、时事、风景等等)
  • create_user(用户id:表示当前文章是哪个用户创建的。用户只能对自己的文章进行删改操作)
  • create_time、update_time(创建文章时间、修改文章时间)


(2)实体类(Article)

二、接口文档分析。

(1)请求方式与请求路径。
  • 请求方式:post。
  • 请求路径:"/article"。


(2)请求参数。
  • 格式:JSON格式数据。

  • 注意下面。
  • state(文章状态)只有两种,"已发布"或"草稿"。所有参数都是必须要传的。
  • title必须是1~10长度的非空字符
  • coverImg必须是一个地址!
  • 所以后面在后端代码中都需要对这些参数进行校验!


  • 请求样例。


(3)响应数据。
  • 格式:JSON数据格式。
  • code(响应的状态码:0或1)、message、data。

三、具体分析与实现。

(1)各层实现的分析。
1、controller层。
  • controller层创建一个ArticleController类。(完成文章管理相关接口开发)
  • 新增文章方法上添加注解@PostMapping。(post请求)并在方法参数中声明一个Article实体类对象,用它接收前端传递的JOSN格式数据。


2、service、mapper层。
  • 同样需要提供ArticleService、ArticleServiceImpl、ArticleMapper(数据访问层)等等。



  • controller层调用service层方法完成添加操作、mapper层编写sql语句完成新增文章操作。

(2)具体代码。
1、ArticleController层。
java">package com.feisi.controller;import com.feisi.pojo.Article;
import com.feisi.pojo.Result;
import com.feisi.service.ArticleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;/*** @Title: ArticleController* @Author HeYouLong* @Package com.feisi.controller* @Date 2024/9/19 下午5:33* @description:*/
@RestController
@RequestMapping("/article")
public class ArticleController {//注入service对象@Autowiredprivate ArticleService articleService;@PostMappingpublic Result add(@RequestBody Article article){articleService.add(article);return Result.success();}}
2、ArticleService层。
java">package com.feisi.service;import com.feisi.pojo.Article;/*** @Title: ArticleService* @Author HeYouLong* @Package com.feisi.service* @Date 2024/11/24 下午9:35* @description: 文章操作业务层接口*/
public interface ArticleService {/*** 新增文章(发布文章)* @param article*/void add(Article article);
}
3、ArticleServiceImpl实现类。
java">package com.feisi.service.impl;import com.feisi.mapper.ArticleMapper;
import com.feisi.pojo.Article;
import com.feisi.service.ArticleService;
import com.feisi.utils.ThreadLocalUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.time.LocalDateTime;
import java.util.Map;/*** @Title: ArticleServiceImpl* @Author HeYouLong* @Package com.feisi.service.impl* @Date 2024/11/24 下午9:35* @description: 文章操作业务层实现类*/
@Service
public class ArticleServiceImpl implements ArticleService {//注入mapper层对象@Autowiredprivate ArticleMapper articleMapper;@Overridepublic void add(Article article) {//补充属性值article.setCreateTime(LocalDateTime.now());article.setUpdateTime(LocalDateTime.now());//从ThreadLocal里面拿到idMap<String, Object> map = ThreadLocalUtil.get();//得到当前用户登录的idInteger userId = (Integer) map.get("id");article.setCreateUser(userId);//调用mapper层新增方法articleMapper.add(article);}
}
4、ArticleMapper层。
java">package com.feisi.mapper;import com.feisi.pojo.Article;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;/*** @Title: ArticleMapper* @Author HeYouLong* @Package com.feisi.mapper* @Date 2024/11/24 下午9:36* @description: 文章操作数据访问层接口*/
@Mapper
public interface ArticleMapper {@Insert("insert into article(title,content,cover_img,state,category_id,create_user,create_time,update_time) " +"values (#{title},#{content},#{coverImg},#{state},#{categoryId},#{createUser},#{createTime},#{updateTime})")void add(Article article);
}
(3)后端接口测试。(postman)
  • 打开postman工具。导入提前准备好的测试用例。



  • 打开后的整体展示。


  • 配置登录token验证令牌。(请求头)
  • 先去登录,拿到最新的token令牌。


  • 给文章管理测试接口统一配置请求头。


  • 数据库数据(文章分类表)


  • 添加一篇关于"人文"的文章。


  • 数据成功进入数据库!


(4)问题与分析。
  • 这里并没有完成一些特定属性的校验。(如字符串长度、非空规定等等)
  • 目前只是完成了新增文章的主体逻辑部分。也就是并没有对前端提交的数据进行校验!
  • 这部分的完成——需要使用Validation框架提供的自定义校验知识。


http://www.ppmy.cn/devtools/136853.html

相关文章

Proteus 8.17的详细安装教程

通过百度网盘分享的文件&#xff1a;Proteus8.17(64bit&#xff09;.zip 链接&#xff1a;https://pan.baidu.com/s/1zu8ts1Idhgg9DGUHpAve7Q 提取码&#xff1a;8q8v 1.右击【Proteus8.17(64bit&#xff09;.zip】&#xff0c;选择【全部解压缩......】。 &#xff0c; 2.…

Android 14 screenrecord录制视频失败的原因分析

文章目录 1. 权限问题2. 存储空间不足3. 命令被中断4. 目标路径问题5. Android 14 的新限制6. 文件系统同步问题7. 录制失败检查步骤总结&#xff1a; 在 Android 14 系统上&#xff0c;使用 screenrecord 命令录制视频后&#xff0c;生成的文件大小为 0&#xff0c;可能的原因…

ESP32学习笔记_Bluetooth(1)——蓝牙技术与 BLE 通信机制简介

摘要(From AI): 这篇笔记详细讲解了蓝牙技术的分类、核心架构和通信流程&#xff0c;重点介绍了低功耗蓝牙&#xff08;BLE&#xff09;的协议栈、角色划分及连接机制&#xff0c;结合拓扑示例清晰阐述了蓝牙网络配置和操作过程 前言&#xff1a;本文档是本人在《ESP32-C3 物联…

HP6心率血压传感器

目录 一、介绍 1、工作原理概述 2、具体实现步骤 二、HP6的通信及配置 1、通信接口 2、器件地址/命令 3、校验 三、程序设计 ①IIC通信相关基础函数 ②HP6相关基础函数 一、介绍 HP6心率血压传感器的原理主要基于光电容积脉搏波描记法&#xff08;PPG&#xff09;&…

【Apache Paimon】-- 6 -- 清理过期数据

目录 1、简要介绍 2、操作方式和步骤 2.1、调整快照文件过期时间 2.2、设置分区过期时间 2.2.1、举例1 2.2.2、举例2 2.3、清理废弃文件 3、参考 1、简要介绍 清理 paimon (表)过期数据可以释放存储空间,优化资源利用并提升系统运行效率等。本文将介绍如何清理 Paim…

FastLLM高性能大模型推理库

FastLLM 是一个高效、易用的轻量级语言模型库。 &#x1f680; 纯c实现&#xff0c;便于跨平台移植&#xff0c;可以在安卓上直接编译&#x1f680; 支持读取Hugging face原始模型并直接量化&#x1f680; 支持部署Openai api server&#x1f680; 支持多卡部署&#xff0c;支…

慢查询优化思路

本文介绍慢查询的优化思路&#xff0c;但不以索引优化作为重点&#xff0c;索引相关的优化可以参考《索引使用原则、索引失效》、《MySQL单表查询时索引使用情况》。 1.应用层面 对于报表类页面&#xff0c;一般涉及到的数据库表较多且数据量大&#xff0c;容易造成接口查询较…

private static final long serialVersionUID = 1L

Java 序列化机制中的一个标识&#xff0c;用于确保序列化和反序列化过程中类的兼容性。 一、具体作用 1.类的唯一标识&#xff1a; 序列化时&#xff0c;Java 会将类的 serialVersionUID 写入序列化后的数据中。反序列化时&#xff0c;Java 会检查 serialVersionUID 是否和原…