Spring Boot 项目 myblog 整理

myblog 项目是一个典型的 Spring Boot 项目,主要包括用户注册、登录、文章管理(创建、查询、更新、删除)等功能。

1. 项目结构与依赖设置

项目初始化与依赖
  • 使用 Spring Initializr 创建项目。
  • 引入必要的依赖包:
    • Spring Boot Web:用于开发 REST API。
    • MyBatis 和 MySQL 驱动:用于数据库交互。
    • Spring Validation:用于验证用户输入。
    • Lombok:减少样板代码。
    • Hibernate Validator:手动加入以支持输入验证。

2. 数据库设计与建表

数据库表设计
  • my_users :用于存储用户信息,包含字段:idnameemailpasswordrole_id 等。
  • my_roles :用于存储用户角色,包含字段:idnamedescription 等。
  • my_articles :用于存储文章信息,包含字段:idtitleauthorcontentcategory_idtagsis_deletedcreatedmodified 等。
SQL 表的相关操作
  • 插入用户和角色:使用插入语句添加初始用户和角色数据。
  • 外键约束与错误:注意在添加用户时,由于外键关系,必须确保角色 ID 存在。

3. 用户模块

用户实体类 (MyUser)
  • 使用 Lombok 注解 @Data@NoArgsConstructor@AllArgsConstructor 简化代码。
  • 添加必要的字段验证注解,例如 @NotBlank@NotNull
用户注册与登录
  • 注册功能 :实现用户注册功能,使用 UserService 服务层来处理业务逻辑。
  • 登录功能 :实现登录,验证用户名和密码,并通过 TokenService 生成 JWT Token。
用户控制器 (UserController)
  • 注册接口 :使用 @PostMapping("/register"),调用 UserService 来进行用户注册。
  • 登录接口 :使用 @PostMapping("/login"),调用 UserService 登录并生成 Token,最后将 Token 作为 JSON 响应返回。

4. 文章管理模块

文章实体类 (MyArticle)
  • MyArticle :使用 Lombok 注解简化代码。
    • 字段 :包括 idtitleauthorcontentcategoryIdtagsisDeletedcreatedmodified
    • 字段验证 :对必要的字段加上验证注解,如 @NotBlank@NotNull
文章控制器 (ArticleController)
  • 添加文章
    • 使用 @PostMapping("/article") 添加新文章。
    • 使用 @Validated 注解对请求参数进行验证,若验证失败,通过 BindingResult 获取错误信息。
  • 查询文章
    • 获取所有文章 :使用 @GetMapping("/articles"),不分页。
    • 分页查询文章 :使用 @GetMapping("/articles/{pageNum}"),通过传入的页码查询文章列表。
  • 更新文章
    • 更新接口 :使用 @PutMapping("/article")
    • 检查传入的文章对象是否包含 ID,并验证其字段。
    • 调用 ArticleService 更新文章。
  • 删除文章
    • 软删除接口 :使用 @DeleteMapping("/article/{id}")
    • 实现软删除,通过修改 isDeleted 字段为 2 来实现逻辑删除。
文章服务层 (ArticleService)
  • 添加文章 (add):为文章设置 ID 并存储。
  • 查询所有文章 (findAll):查询所有文章,未分页。
  • 分页查询文章 (getListByPageNum):根据传入的页码计算偏移量来查询分页文章。
  • 文章详情 (detail):根据文章 ID 查询文章详情。
  • 更新文章 (update):更新文章信息。
  • 删除文章 (delete) :软删除文章,修改 isDeleted 字段。
文章 Mapper (MyArticleMapper)
  • 使用 MyBatis 注解 @Mapper 定义数据库操作。
  • 新建文章 :使用 @Insert 注解插入文章。
  • 查询文章
    • 不分页:使用 @Select("SELECT * FROM my_articles WHERE is_deleted = 1") 查询所有未删除的文章。
    • 分页:使用 @Select("SELECT * FROM my_articles WHERE is_deleted = 1 LIMIT #{offset}, 30") 分页查询。
    • 查询详情:通过文章 id 查询文章详情。
  • 更新文章 :使用 @Update 更新文章内容。
  • 软删除文章 :使用 @Update("UPDATE my_articles SET is_deleted = 2 WHERE id = #{id}") 实现软删除。

5. 错误处理与验证

输入验证
  • 添加和更新文章 :使用 @Validated 注解验证输入数据,并使用 BindingResult 来捕获验证错误。
  • Controller 层:对错误返回相应的错误码和消息,方便前端处理。
全局异常处理
  • 异常处理机制 :在每个控制器方法中使用 try-catch 来捕获异常,返回 JsonResultObject,将错误信息统一封装在响应中,确保系统健壮性。

6. Token 处理

  • 登录时生成 Token
    • UserController/login 方法中调用 TokenService 生成 Token,返回给客户端用于后续请求的认证。
  • 权限验证
    • 使用自定义注解和拦截器来验证每个请求是否携带有效的 Token,用于保护需要认证的接口(例如,添加、更新、删除文章)。

7. 项目运行与测试

本地测试
  • 数据库初始化:确保所有的数据库表已经正确创建,并且初始数据(如用户角色)已插入。
  • Postman 测试接口
    • 用户注册与登录 :通过 /v1/register/v1/login 测试用户注册和登录功能,登录成功后获取 Token。
    • 文章接口
      • 添加文章 :使用 /v1/article 通过 POST 请求添加新文章。
      • 查询文章 :通过 /v1/articles/v1/articles/{pageNum} 测试文章列表的查询。
      • 更新与删除文章:分别通过 PUT 和 DELETE 请求测试更新和删除文章。

8. 关键问题与解决方案

  • SQL 外键约束错误:在插入用户数据时确保角色数据已存在,避免外键约束失败。
  • Token 未返回问题:确保登录逻辑中成功生成 Token,并将其正确返回给前端。
  • 验证失败的处理 :在控制器中使用 BindingResult 检查参数错误,并及时返回有意义的错误信息。
  • 重复方法定义错误 :在 MyArticleMapper 中避免重复的方法定义,保证每个方法的名称唯一且功能明确。

总结

  • 项目基于 Spring Boot,结合了 MyBatis 和 Hibernate Validator 等技术栈,适用于构建一个基本的博客系统。
  • 包含了用户管理和文章管理模块,并实现了增删改查功能。
  • 使用 JWT Token 进行用户身份认证,保证了部分接口的安全性。
  • 在开发过程中,通过单独的 Service 层来处理业务逻辑,将控制器层的职责简化为参数验证与返回结果的封装,确保代码的可维护性和扩展性。
相关推荐
向前看-9 分钟前
验证码机制
前端·后端
xlsw_11 分钟前
java全栈day20--Web后端实战(Mybatis基础2)
java·开发语言·mybatis
黄油饼卷咖喱鸡就味增汤拌孜然羊肉炒饭1 小时前
SpringBoot如何实现缓存预热?
java·spring boot·spring·缓存·程序员
超爱吃士力架2 小时前
邀请逻辑
java·linux·后端
AskHarries4 小时前
Spring Cloud OpenFeign快速入门demo
spring boot·后端
莫名其妙小饼干4 小时前
网上球鞋竞拍系统|Java|SSM|VUE| 前后端分离
java·开发语言·maven·mssql
isolusion5 小时前
Springboot的创建方式
java·spring boot·后端
Yvemil75 小时前
《开启微服务之旅:Spring Boot Web开发举例》(一)
前端·spring boot·微服务
zjw_rp5 小时前
Spring-AOP
java·后端·spring·spring-aop
TodoCoder5 小时前
【编程思想】CopyOnWrite是如何解决高并发场景中的读写瓶颈?
java·后端·面试