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

目录

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

(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层。
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对象
    @Autowired
    private ArticleService articleService;
    @PostMapping
    public Result add(@RequestBody Article article){
        articleService.add(article);
        return Result.success();
    }

}
2、ArticleService层。
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实现类。
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层对象
    @Autowired
    private ArticleMapper articleMapper;
    @Override
    public void add(Article article) {
        //补充属性值
        article.setCreateTime(LocalDateTime.now());
        article.setUpdateTime(LocalDateTime.now());
        //从ThreadLocal里面拿到id
        Map<String, Object> map = ThreadLocalUtil.get();
        //得到当前用户登录的id
        Integer userId = (Integer) map.get("id");
        article.setCreateUser(userId);
        //调用mapper层新增方法
        articleMapper.add(article);
    }
}
4、ArticleMapper层。
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框架提供的自定义校验知识。

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

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

相关文章

Vue小项目(开发一个购物车)

基于Vue知识点1&#xff08;点击跳转&#xff09;、Vue知识点2&#xff08;点击跳转&#xff09; ​想要学习更多前端知识&#xff1a;点击Web前端专栏 接下来我们开发一个如下图所示&#xff0c;有最基本购物车功能的简易小项目 下面这是最基本的HTMLCSS框架&#xff01;&…

Vue.js 学习总结(16)—— 为什么 :deep、/deep/、>>> 样式能穿透到子组件

不使用 deep 要想修改三方组件样式&#xff0c;只能添加到 scoped 之外&#xff0c;弊端是污染了全局样式&#xff0c;后续可能出现样式冲突。 <style lang"less"> .container {.el-button {background: #777; } }使用 /deep/ deprecated .container1 {/deep…

禁用达梦DEM的agent

agent占用内存较多&#xff0c;实际没什么使用&#xff0c;考虑停止agent 应该切换到root执行停止 cd /dm/dmdbms/tool/dmagent/service/ ./DmAgentService stop禁用

多维高斯分布的信息熵和KL散度计算

多维高斯分布是一种特殊的多维随机分布&#xff0c;应用非常广泛&#xff0c;很多现实问题的原始特征分布都可以看作多维高斯分布。本文以数据特征服从多维高斯分布的多分类任务这一理想场景为例&#xff0c;从理论层面分析数据特征和分类问题难度的关系注意&#xff0c;本文分…

【ESP32CAM+Android+C#上位机】ESP32-CAM在STA或AP模式下基于UDP与手机APP或C#上位机进行视频流/图像传输

前言: 本项目实现ESP32-CAM在STA或AP模式下基于UDP与手机APP或C#上位机进行视频流/图像传输。本项目包含有ESP32源码(arduino)、Android手机APP源码以及C#上位机源码,本文对其工程项目的配置使用进行讲解。实战开发,亲测无误。 AP模式,就是ESP32发出一个WIFI/热点提供给电…

Banana Pi BPI-CanMV-K230D-Zero 采用嘉楠科技 K230D RISC-V芯片设计

概述 Banana Pi BPI-CanMV-K230D-Zero 采用嘉楠科技 K230D RISC-V芯片设计,探索 RISC-V Vector1.0 的前沿技术&#xff0c;选择嘉楠科技的 Canmv K230D Zero 开发板。这款创新的开发板是由嘉楠科技与香蕉派开源社区联合设计研发&#xff0c;搭载了先进的勘智 K230D 芯片。 K230…

RocketMQ: Producer与Consumer 最佳实践

Producer 1 &#xff09;发送消息注意事项 1.1 一个应用尽可能用一个 Topic&#xff0c;消息子类型用 tags 来标识&#xff0c;tags 可以由应用自由设置。只有发送消息设置了tags&#xff0c;消费方在订阅消息时&#xff0c;才可以利用 tags 在 broker 做消息过滤 message.setT…

MCGSMCGS昆仑通态触摸屏

MCGS昆仑通态触摸屏应用实例详解 1目录设置 本案例讲了两个窗口的互相调用 创建工程 首先创建一个新工程 打开软件 McgsPro组态软件 菜单栏&#xff1a;文件&#xff1a;新建工程 打开工程设置窗口 HMI配置中应该是对应的不同型号的触摸屏&#xff0c; 选择一个类型&#x…

低温存储开关机问题

问题&#xff1a; 某消费电子产品在进行可靠性实验室&#xff0c;在低温-30C存储两个小时后&#xff0c;上电不开机。在常温25C时&#xff0c;开关机正常。 分析&#xff1a; 1、接串口抓log信息&#xff0c;从打印信息可以看出uboot可以起来&#xff0c;在跑kernel时&#x…

【JavaEE进阶】 JavaScript

本节⽬标 了解什么是JavaScript, 学习JavaScript的常⻅操作, 以及使⽤JQuery完成简单的⻚⾯元素操作. 一. 初识 JavaScript 1.JavaScript 是什么 JavaScript (简称 JS), 是⼀个脚本语⾔, 解释型或即时编译型的编程语⾔. 虽然它是作为开发Web⻚⾯的脚本语⾔⽽出名&#xff0c;…

蓝桥杯每日真题 - 第23天

题目&#xff1a;&#xff08;直线&#xff09; 题目描述&#xff08;12届 C&C B组C题&#xff09; 解题思路&#xff1a; 题目理解: 在平面直角坐标系中&#xff0c;从给定的点集中确定唯一的直线。 两点确定一条直线&#xff0c;判断两条直线是否相同&#xff0c;可通过…

战略思维:破解复杂世界的系统性智慧

在当今快速演变且错综复杂的时代背景下&#xff0c;战略思维已然成为个人、组织乃至国家在应对挑战和实现目标过程中的核心能力。它不仅是一种思考模式&#xff0c;更是一套系统且富有智慧的工具&#xff0c;助力我们在混沌的环境中精准定位方向、敏锐捕捉机遇。 一、目…

html+js实现图片的放大缩小等比缩放翻转,自动播放切换,顺逆时针旋转

效果图&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>图片预览</title><sty…

postgresql|数据库开发|python的psycopg2库按指定顺序批量执行SQL文件(可离线化部署)

一、 psycopg2简介 psycopg2库是python的一个可直接操作postgresql数据库的类库&#xff0c;是一个用于Python编程语言的PostgreSQL数据库适配器。它允许开发人员使用Python语言与PostgreSQL数据库进行交互和操作&#xff0c;不同于java&#xff0c;需要专用的一个驱动&#…

基于Java Springboot个人健康管理网站

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 数据…

论文概览 |《Journal of Urban Technology》2024 Vol.31 Issue.2

本次给大家整理的是《Journal of Urban Technology》杂志2024年第31卷第2期的论文的题目和摘要&#xff0c;一共包括6篇SCI论文&#xff01; 论文1 Aerial Video Surveillance in a Megacity: A Case Study in Santiago, Chile 大城市中的空中视频监控&#xff1a;智利圣地亚哥…

模型 I/O 与 LangChain 实践

模型 I/O 与 LangChain 实践 本文是《LangChain 实战课》第 4 节——模型 I/O&#xff1a;输入提示、调用模型、解析输出的一些学习笔记与总结。这篇文章将围绕模型 I/O 的基本概念、LangChain 提供的最佳实践以及如何通过 LangChain 实现高效的结构化数据处理展开。 什么是模…

【编译原理】词法、语法、语义实验流程内容梳理

编译原理实验有点难&#xff0c;但是加上ai的辅助就会很简单&#xff0c;下面梳理一下代码流程。 全代码在github仓库中&#xff0c;链接&#xff1a;NeiFeiTiii/CompilerOriginTest at Version2.0&#xff0c;感谢star一下 一、项目结构 关键内容就是里面的那几个.c和.h文件。…

uni-app 认识条件编译,了解多端部署

一. 前言 在使用 uni-app 进行跨平台开发的过程中&#xff0c;经常会遇到需要针对不同平台或不同环境进行条件编译的情况。条件编译是一种在编译过程中根据指定条件选择不同代码路径的技术&#xff0c;可以帮助我们在不同平台或环境下编写不同的代码&#xff0c;以适应不同的平…

使用ChatGPT生成和优化电子商务用户需求规格说明书

在电子商务项目开发中&#xff0c;用户需求规格说明书&#xff08;User Requirement Specification, URS&#xff09;是团队沟通与项目成功的基石。然而&#xff0c;面对复杂多变的需求&#xff0c;如何快速生成清晰、完整且具备说服力的文档&#xff1f;这正是AI工具的用武之地…