文本----简单编写文章的方法(中),后端接口的编写,自己编写好页面就上传到自己的服务器上,使用富文本编辑器进行编辑,想写好一个项目,先分析一下需求,再理一下实现思路,再搞几层,配好参数校验,lomb

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 文本----简单编写文章的方法(中),后端接口的编写,自己编写好页面就上传到自己的服务器上,使用富文本编辑器进行编辑,想写好一个项目,先分析一下需求,再理一下实现思路,再搞几层,配好参数校验,lomb

1.1 今天在编写代码的时候,突然想实现一个目标:怎样能够在自己的网站上发一些文章

(lingyidianke.com)

1.2 参考自己之前写的一些资料,做一做试试,那么怎么做呢?首先,我们参考一下我们之前的资料,之前写过的大事件资料:

1.2.1 从项目结构上看,我们要创两个项目

1.3 这里前端项目的名字叫lingyidianke,后端项目的目录叫WorldToLingyidianke,先建一个Vue文档

1.4 创建Vue项目可以参考资料,cmd中放入

视频弹幕网站设计01-我爱发弹幕-CSDN博客

2、在这里创建一个新的项目

3、配置项目

4、简单的配置

5、填写Eslint

6、这样就保存了项目

7、这样前端项目创建好了

开始创建后端:

这里参考资料:idea创建SpringBoot项目

大事件后端项目01-----SpringBoot快速入门_大事件springboot项目-CSDN博客

视频弹幕网站设计01-我爱发弹幕-CSDN博客

将pom.xml文件中idea2019.3.3的相关依赖,进行注入

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.6</version>
    </parent>
<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
 
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.2</version>
        </dependency>
 
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

后端项目创建application依赖,链接:

如何使用Maven构建SpringBoot项目-CSDN博客

创建好项目之后:爆了一个bug,不支持发行版本17

这里参考资料:

idea提示不支持发行版本13_idea不支持发行版本13-CSDN博客

这里又报了一个bug

Consider the following:

   If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.

   If you have database settings to be loaded from a particular profile you may need to activate it (no profiles are currently active).

这里可以参考资料:

Action:Consider the following: If you want an embedde ,springBoot配置数据库,补全springBoot的xml和mysql配置信息就好了-CSDN博客

配置文件添加sql的配置:application.yml

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://ip+端口+库名?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
    username:
    password:

启动properties就行?

8、弄完上述步骤,上传gitee仓库

8.1  git remote add origin 《仓库路径》

git push --set-upstream origin master

9、先简单分析一下功能流程:最简单的功能流程,写------》发布成功

9.1 先建好自己的数据库,视频链接资料:数据库的格式在这里,state有两种状态:链接资料

大事件后端项目26------新增文章-CSDN博客

9.2 弄一个实体类和数据表,接下来造一个数据库,文本的数据库和实体类

9.3

9.4 首先我们建好四个层,实体类:

9.5 编写实体类:这里参考资料是B站32节:

实战篇-20_新增文章_哔哩哔哩_bilibili

10、编写新增文章分类,我们先写好类和接口:

11、先写个类:Article.class的类

@Data
public class Article {
    private Integer id;//主键ID
    @NotEmpty
    @Pattern(regexp = "^\\S{1,10}$")
    private String title;//文章标题
    @NotEmpty
    private String content;//文章内容
    @NotEmpty
    @URL
    private String coverImg;//封面图像
 
    @State
    private String state;//发布状态 已发布|草稿
    @NotNull
    private Integer categoryId;//文章分类id
    private Integer createUser;//创建人ID
    private LocalDateTime createTime;//创建时间
    private LocalDateTime updateTime;//更新时间
}

12、在我们serivce层中创建类和接口,接口的名字叫做:ArticleService

13、在impl中添加ArticleSerivice的实现类

14、在impl中编写测试类ArticleSeriviceImpl

15、类上添加接口,添加Service的注解

16、创建ArticleMapper的接口

17、添加@Mapper注解

18、先将Mapper层的接口,controller层的实现类,serivice的接口和实现类写上

19、添加注解和配置映射路径,方法的传递类中接入注解

19.1 添加@RequestBody注解

19.2 配置好Mysql的相关内容,打开Navicate:把Aticle的资料放进去:这里我们重新建一个数据库:重新写一个Aticle的数据库

20、创建好了,配置Mybatis的资料

21、Spring这里我们写一个springBoot参数需要的依赖:

21.1 pom.xml中添加:

1. <dependency>
2. <groupId>org.springframework.boot</groupId>
3. <artifactId>spring-boot-starter-validation</artifactId>
4. </dependency>

22、为检验验证信息,添加Exception的类:

23、接下来创建一个GlobalExceptionHandler的接口:

24、添加@RestControllerAdvice注解,Exception需要result的实现类和lombok的依赖:需要引入对应依赖

1. <!--lombok依赖-->
2. <dependency>
3. <groupId>org.projectlombok</groupId>
4. <artifactId>lombok</artifactId>
5. </dependency>

25、引入对应依赖之后,编写result的实现类

1. package worldtolingyidianke.demo.bean;
2. 
3. 
4. import lombok.AllArgsConstructor;
5. import lombok.Data;
6. import lombok.NoArgsConstructor;
7. 
8. //统一响应结果
9. @NoArgsConstructor
10. @AllArgsConstructor
11. @Data
12. public class Result<T> {
13. private Integer code;//业务状态码  0-成功  1-失败
14. private String message;//提示信息
15. private T data;//响应数据
16. 
17. //快速返回操作成功响应结果(带响应数据)
18. public static <E> Result<E> success(E data) {
19. return new Result<>(0, "操作成功", data);
20.     }
21. 
22. //快速返回操作成功响应结果
23. public static Result success() {
24. return new Result(0, "操作成功", null);
25.     }
26. 
27. public static Result error(String message) {
28. return new Result(1, message, null);
29.     }
30. }

26、GlobalExceptionHandler的资料

package worldtolingyidianke.demo.exception;
 
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import worldtolingyidianke.demo.bean.Result;
 
@RestControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(Exception.class)
    public Result handleException(Exception e){
        e.printStackTrace();
        return Result.error(StringUtils.hasLength(e.getMessage())? e.getMessage() : "操作失败");
    }
}

27、因为我们需要校验参数,因此我们用相应的依赖:

1. <dependency>
2. <groupId>org.springframework.boot</groupId>
3. <artifactId>spring-boot-starter-validation</artifactId>
4. </dependency>

28、分析一下实现思路:

29、alt + enter就可以实现了

30、ArticleController的类:点击新增实现类:

31、alt + enter重写方法

32、添加@Override

33、articleImpl补全里面的内容

33.1 添加一个ThreadLocalUtil的工具类:

package com.itheima.utils;
 
import java.util.HashMap;
import java.util.Map;
 
/**
 * ThreadLocal 工具类
 */
@SuppressWarnings("all")
public class ThreadLocalUtil {
    //提供ThreadLocal对象,
    private static final ThreadLocal THREAD_LOCAL = new ThreadLocal();
 
    //根据键获取值
    public static <T> T get(){
        return (T) THREAD_LOCAL.get();
    }
  
    //存储键值对
    public static void set(Object value){
        THREAD_LOCAL.set(value);
    }
 
 
    //清除ThreadLocal 防止内存泄漏
    public static void remove(){
        THREAD_LOCAL.remove();
    }
}

34、再添加一个ArticleMapper的工具类

35、add添加alt +  enter方法,添加alt + Mapper的接口

36、

package com.itheima.mapper;
 
import com.itheima.pojo.Article;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
 
import java.util.List;
 
@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);
 
 
    List<Article> list(Integer userId, Integer categoryId, String state);
}

37、最后我要的内容就是点击send能够正常添加:

38、application中的配置文件到java项目的层,

38.1 classpath:这里直接放到mappers下吧!!

39、

40、因为代码是抄的,所以出现了许多的bug

41、impl中的出现了变红的情况:Article是因为多写了一个,这里是因为使用idea的时候,需要相关插件:参考资料:

@Date不管用怎么办,想少写get和setter方法,reate方法创建不了怎么办,Cannot resolve method ‘setxxx‘ in ‘xxx‘不管用怎么办,到Maven创建插件-CSDN博客

添加插件之后,三个错误就全部解决了

42、这里爆了三个错误,

43、这里能够启动说明了里面没有bug了

44、后来经过验证,这里还要添加拦截器和JWT令牌才行:

<!--java-jwt坐标-->

<dependency>

 <groupId>com.auth0</groupId>

 <artifactId>java-jwt</artifactId>

 <version>4.4.0</version>

</dependency>


最后能够用postman进行测试:

1、打开postman工具,导入相应的依赖

1.1 资料链接26分:33秒

实战篇-03_注册接口_哔哩哔哩_bilibili

2、点击wordpress

2.1 创建名字

2.2 第二步创建一个工作集collections

2.3 找到提前准备好的测试用例

2.4 点击import,再点击files

2.5 这里提前准备好了测试用例进行保存就行了

2.6 准入用户测试接口:文档资源路径,导入接口路径

git@gitee.com:lkc20000416/test-case.git

2.7 打开Body,测试一下试试:

2.8 最后点击send,操作一下:

后端这里要的最后的结果是点击send,就能够出现内容

前端使用富文本编辑器:

这里将源码给贴上:

最终结果要能够在对应页面呈现一篇布局不错的文章

48、新增文章的接口,将这几个层给编写完成

49、第一步在pojo层,创建Article类:

50、第二步在ArticleController中添加ArticleController类

51、第三步在service层中创建一个ArticleService接口

52、第四步实体类

53、第五步先继承一下ArticleSerivce的接口,同时配置注解

54、第六步

55、第七步,在ArticleService接口

56、ArticleSerivceImpl的写法

57、ArticleMapper的接口的写法:

最后我想要的情况:点击send之后,就能够存储到数据库当中

做完新增文章的接口:具体参考资料是:

大事件后端项目21-------新增文章分类-CSDN博客

再做完文章分类列表:配置完token之后,显示成功即可

大事件后端项目22----文章分类列表-CSDN博客

再做完获取文章分类详情,参考文章

CSDN

这样我们就可以添加文章了,因为有外键的影响,必须执行完前面的操作才行:


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
弹性计算 监控 负载均衡
|
2月前
|
监控 中间件 Java
后端技术:构建高效、稳定的服务器端应用
【10月更文挑战第5天】后端技术:构建高效、稳定的服务器端应用
103 0
|
16天前
|
运维 监控 负载均衡
slb后端服务器故障
slb后端服务器故障
39 13
|
18天前
|
开发框架 .NET PHP
网站应用项目如何选择阿里云服务器实例规格+内存+CPU+带宽+操作系统等配置
对于使用阿里云服务器的搭建网站的用户来说,面对众多可选的实例规格和配置选项,我们应该如何做出最佳选择,以最大化业务效益并控制成本,成为大家比较关注的问题,如果实例、内存、CPU、带宽等配置选择不合适,可能会影响到自己业务在云服务器上的计算性能及后期运营状况,本文将详细解析企业在搭建网站应用项目时选购阿里云服务器应考虑的一些因素,以供参考。
|
24天前
|
弹性计算 负载均衡 安全
slb应用服务器对Host头有校验要求
slb应用服务器对Host头有校验要求
24 6
|
28天前
|
负载均衡 监控 应用服务中间件
配置Nginx反向代理时如何指定后端服务器的权重?
配置Nginx反向代理时如何指定后端服务器的权重?
49 4
|
1月前
|
JavaScript
使用node.js搭建一个express后端服务器
Express 是 Node.js 的一个库,用于搭建后端服务器。本文将指导你从零开始构建一个简易的 Express 服务器,包括项目初始化、代码编写、服务启动与项目结构优化。通过创建 handler 和 router 文件夹分离路由和处理逻辑,使项目更清晰易维护。最后,通过 Postman 测试确保服务正常运行。
48 1
|
1月前
|
监控 负载均衡 算法
slb管理后端服务器
【10月更文挑战第18天】
35 5
|
1月前
|
关系型数据库 API 数据库
后端开发的艺术:从零到一构建高效服务器
在数字化时代,后端开发是支撑现代互联网应用的基石。本文旨在探讨后端开发的核心概念、关键技术以及如何构建一个高效的服务器。我们将从基础的编程语言选择开始,逐步深入到数据库设计、API开发和性能优化等关键领域。通过实际案例分析,我们将揭示后端开发的复杂性和挑战性,同时提供实用的解决方案和最佳实践。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的见解和启发。
|
2月前
|
弹性计算 Java Linux
ECS使用体验的文章
ECS使用体验的文章
下一篇
DataWorks