1.1 今天在编写代码的时候,突然想实现一个目标:怎样能够在自己的网站上发一些文章
1.2 参考自己之前写的一些资料,做一做试试,那么怎么做呢?首先,我们参考一下我们之前的资料,之前写过的大事件资料:
1.2.1 从项目结构上看,我们要创两个项目
1.3 这里前端项目的名字叫lingyidianke,后端项目的目录叫WorldToLingyidianke,先建一个Vue文档
1.4 创建Vue项目可以参考资料,cmd中放入
2、在这里创建一个新的项目
3、配置项目
4、简单的配置
5、填写Eslint
6、这样就保存了项目
7、这样前端项目创建好了
开始创建后端:
这里参考资料:idea创建SpringBoot项目
大事件后端项目01-----SpringBoot快速入门_大事件springboot项目-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有两种状态:链接资料
9.2 弄一个实体类和数据表,接下来造一个数据库,文本的数据库和实体类
9.3
9.4 首先我们建好四个层,实体类:
9.5 编写实体类:这里参考资料是B站32节:
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的时候,需要相关插件:参考资料:
添加插件之后,三个错误就全部解决了
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秒
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之后,就能够存储到数据库当中
做完新增文章的接口:具体参考资料是:
再做完文章分类列表:配置完token之后,显示成功即可
再做完获取文章分类详情,参考文章
这样我们就可以添加文章了,因为有外键的影响,必须执行完前面的操作才行: