Spring Boot 项目 myblog 整理

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

1. 项目结构与依赖设置

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

2. 数据库设计与建表

数据库表设计
  • my_users :用于存储用户信息,包含字段:id、name、email、password、role_id 等。
  • my_roles :用于存储用户角色,包含字段:id、name、description 等。
  • my_articles :用于存储文章信息,包含字段:id、title、author、content、category_id、tags、is_deleted、created、modified 等。
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 注解简化代码。
    • 字段 :包括 id、title、author、content、categoryId、tags、isDeleted、created、modified。
    • 字段验证 :对必要的字段加上验证注解,如 @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 小时前
基于springboot的食品仓库管理系统
java·spring boot·后端
滴滴答答哒9 小时前
ASP.NET Core + FaceRecognitionDotNet 人脸识别实战:DI 单例、特征向量持久化与 1:N 比对
后端·asp.net
captain37612 小时前
MyBatis操作数据库(入门2)
java·数据库·spring boot·后端·spring·mybatis
IT_陈寒13 小时前
Java序列化踩坑记:对象循环引用让我加班两小时
前端·人工智能·后端
泡海椒13 小时前
05-雷达图多维画像-信用评级多维画像
后端
王中阳Go13 小时前
5.27 分钟干完后端和全部测试:一场三小时笔试的五个失分点,四个不在代码上
大数据·数据库·人工智能·后端·大语言模型
大哥430913 小时前
Modbus 的"字序":一个配错就变成天文数字,或者干脆变成 0
后端
岩钧13 小时前
New API 源码解析:一个生产级 AI 网关的架构与实现
后端
学到老活到老13 小时前
第 24 集:配置文件写了 80,Spring Boot 为什么读到 90?
java·后端·spring
用户3600555790013 小时前
Kestrel_VLLM - 25 · 全注意力层设备化、整层对拍与访存粒度
后端