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 层来处理业务逻辑,将控制器层的职责简化为参数验证与返回结果的封装,确保代码的可维护性和扩展性。
相关推荐
DevOpsDojo8 分钟前
HTML语言的数据结构
开发语言·后端·golang
一只淡水鱼6634 分钟前
【spring原理】Bean的作用域与生命周期
java·spring boot·spring原理
时韵瑶1 小时前
Scala语言的云计算
开发语言·后端·golang
Jerry Lau1 小时前
大模型-本地化部署调用--基于ollama+openWebUI+springBoot
java·spring boot·后端·llama
小白的一叶扁舟1 小时前
Kafka 入门与应用实战:吞吐量优化与与 RabbitMQ、RocketMQ 的对比
java·spring boot·kafka·rabbitmq·rocketmq
幼儿园老大*1 小时前
【系统架构】如何设计一个秒杀系统?
java·经验分享·后端·微服务·系统架构
fmdpenny1 小时前
Django的安装
后端·python·django
计算机-秋大田1 小时前
基于SSM的家庭记账本小程序设计与实现(LW+源码+讲解)
java·前端·后端·微信小程序·小程序·课程设计
Code侠客行1 小时前
Scala语言的循环实现
开发语言·后端·golang
Cikiss2 小时前
「全网最细 + 实战源码案例」设计模式——简单工厂模式
java·后端·设计模式·简单工厂模式