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 层来处理业务逻辑,将控制器层的职责简化为参数验证与返回结果的封装,确保代码的可维护性和扩展性。
相关文章:
Spring Boot 项目 myblog 整理
myblog 项目是一个典型的 Spring Boot 项目,主要包括用户注册、登录、文章管理(创建、查询、更新、删除)等功能。 1. 项目结构与依赖设置 项目初始化与依赖 使用 Spring Initializr 创建项目。引入必要的依赖包: Spring Boot W…...
uniapp 城市选择插件
uniapp城市选择插件 如上图 地址 完整demo <template><view><city-selectcityClick"cityClick":formatName"formatName":activeCity"activeCity":hotCity"hotCity":obtainCitys"obtainCitys":isSearch&quo…...
测试工程师如何在面试中脱颖而出
目录 1.平时工作中是怎么去测的? 2.B/S架构和C/S架构区别 3.B/S架构的系统从哪些点去测? 4.你为什么能够做测试这一行?(根据个人情况分析理解) 5.你认为测试的目的是什么? 6.软件测试的流程ÿ…...
Mesh路由组网
Mesh无线网格网络,多跳(multi-hop)网络,为解决全屋覆盖信号,一般用于家庭网络和小型企业 原理 网关路由器(主路由,连接光猫),Mesh路由器(子路由,…...
LeetCode131:分割回文串
题目链接:131. 分割回文串 - 力扣(LeetCode) 代码如下: class Solution { private:vector<vector<string>> result;vector<string> path; // 放已经回文的子串void backtracking (const string& s, int s…...
详细解析 devmem 命令:在 Linux 系统中直接访问内存的利器
目录 什么是 devmem?为什么需要 devmem?devmem 命令的基本语法devmem 在硬件调试中的应用安全性与风险devmem 的常见应用示例结论 在嵌入式系统开发和硬件调试中,开发者经常需要直接与硬件打交道,访问和修改内存中某些特定区域的内…...
[Docker-显示所有容器IP] 显示docker-compose.yml中所有容器IP的方法
本文由Markdown语法编辑器编辑完成。 1. 需求背景: 最近在启动一个服务时,突然发现它的一个接口,被另一个服务ip频繁的请求。 按理说,之前设置的是,每隔1分钟请求一次接口。但从日志来看,则是1秒钟请求一次ÿ…...
【前端知识】nodejs项目配置package.json深入解读
package.json详细解读 文件解读一、文件结构二、字段详解三、使用场景四、注意事项 组件版本匹配规则 文件解读 package.json 文件是 Node.js 项目中的一个核心配置文件,它位于项目的根目录下,并包含项目的基本信息、依赖关系、脚本、版本等内容。以下是…...
XGBOOST算法Python实现(保姆级)
摘要 XGBoost算法(eXtreme Gradient Boosting)在目前的Kaggle、数学建模和大数据应用等竞赛中非常流行。本文将会从XGBOOST算法原理、Python实现、敏感性分析和实际应用进行详细说明。 目录 0 绪论 一、材料准备 二、算法原理 三、算法Python实现 3…...
JDK、MAVEN与IDEA的安装与配置
1.认识JDK、MAVEN与IDEA JDK 提供了编译和运行Java程序的基本环境。Maven 帮助管理项目的构建和依赖。IDEA 提供了一个强大的开发环境,使得编写、调试和运行Java程序更加高效。 2. 安装与环境配置 2.1 官网地址 选择你需要的版本下载: MAVEN下载传送…...
输出比较简介
输出比较简介 主要是用来输出PWM波形,这个波形是驱动电机的(智能车和机器人等)必要条件 OC(Output Compare)输出比较,还有IC,全称是Input Capture,意为输入捕获,还有CC…...
什么是反向 DNS 查找以及它的作用是什么?
反向DNS查询(rDNS)是一种技术,用于确定与某个IP地址对应的域名。当我们对一个IP地址进行反向DNS查询时,实际上是向域名系统(DNS)的特殊部分请求信息,这部分被称为PTR记录。PTR记录会返回与这个I…...
集群聊天服务器(13)redis环境安装和发布订阅命令
目录 环境安装订阅redis发布-订阅的客户端编程环境配置客户端编程 功能测试 环境安装 sudo apt-get install redis-server 先启动redis服务 /etc/init.d/redis-server start默认在6379端口上 redis是存键值对的,还可以存链表、数组等等复杂数据结构 而且数据是在…...
[ubuntu]编译共享内存读取出现read.c:(.text+0x1a): undefined reference to `shm_open‘问题解决方案
问题log /tmp/ccByifPx.o: In function main: read.c:(.text0x1a): undefined reference to shm_open read.c:(.text0xd9): undefined reference to shm_unlink collect2: error: ld returned 1 exit status 程序代码 #include <stdio.h> #include <stdlib.h> #…...
Python Matplotlib 安装指南:使用 Miniconda 实现跨 Linux、macOS 和 Windows 平台安装
Python Matplotlib 安装指南:使用 Miniconda 实现跨 Linux、macOS 和 Windows 平台安装 Matplotlib是Python最常用的数据可视化工具之一,结合Miniconda可以轻松管理安装和依赖项。在这篇文章中,我们将详细介绍如何使用Miniconda在Linux、mac…...
DimensionX 部署笔记
目录 生成视频用CogVideoX-5b-I2V 推理代码: DimensionX 生成视频用CogVideoX-5b-I2V 推理代码: 可以生成,从左向右旋转的,也可以生成从上往下旋转的: import torch from diffusers import CogVideoXImageToVideo…...
django从入门到精通(五)——表单与模型
好的,下面将详细介绍 Django 的表单与模型,包括它们的定义、使用、如何在 Django Admin 中结合使用,以及相关的字段类型和验证机制。 Django 模型与表单 1. Django 模型 Django 模型是一个 Python 类,用于定义数据库中的数据结…...
C语言Day 03 学习总结
Day 03 学习总结 流程控制语句 顺序结构 程序从上到下依次执行。每一条语句顺序执行,直到结束。 选择结构 程序根据条件选择执行某一条分支。包括 if-else 和 switch-case。 循环结构 程序反复执行某段代码。包括 for、while、do-while。 跳转结构 控制程序直接跳…...
kafka中是如何快速定位到一个offset的
定位到具体的segment日志文件,采用二分法先定位到index索引文件计算查找的offset在日志文件的相对偏移量 1、分区和日志段: 每个主题的分区(Partition)被划分为多个日志段(Log Segment)。每个日志段是一个…...
视频对接rtsp协议学习
RTSP协议在视频平台中的应用 RTSP(Real Time Streaming Protocol)是一种基于TCP/IP的应用层协议,主要用于控制流媒体数据的传输和播放。它通过定义一系列命令和请求,实现对流媒体服务器的远程控制,但不传输媒体数据…...
DataRoom开源大屏设计器:零代码打造专业数据可视化大屏的终极指南
DataRoom开源大屏设计器:零代码打造专业数据可视化大屏的终极指南 【免费下载链接】DataRoom 🔥基于SpringBoot、MyBatisPlus、ElementUI、G2Plot、Echarts等技术栈的大屏设计器,具备目录管理、DashBoard设计、预览能力,支持MySQL…...
实战指南:如何构建企业级Chrome自动化测试环境
实战指南:如何构建企业级Chrome自动化测试环境 【免费下载链接】chrome-for-testing 项目地址: https://gitcode.com/gh_mirrors/ch/chrome-for-testing Chrome for Testing 是Google专为浏览器自动化测试设计的专业解决方案,解决了传统Chrome版…...
三步解锁B站4K高清视频:免费下载大会员专属内容终极指南
三步解锁B站4K高清视频:免费下载大会员专属内容终极指南 【免费下载链接】bilibili-downloader B站视频下载,支持下载大会员清晰度4K,持续更新中 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader 你是不是也遇到过…...
百度GEO优化是什么意思
这是很多国内企业主都会问的问题。因为在大多数人的认知中,“搜索百度”,所以一提到GEO,自然联想到百度。百度GEO优化,指的是在百度搜索引擎及其AI生态产品中,围绕百度AI生成的答案模块进行的品牌可见性优化。这包含两…...
AssetStudio深度解析:Unity资源二进制结构与离线反编译原理
1. 这不是“又一个Unity资源查看器”,而是一把能拆开Unity游戏包的手术刀AssetStudio这个名字,第一次见的人常误以为是Unity官方出的配套工具——毕竟带个“Studio”后缀,界面又长得挺像Unity编辑器。但其实它和Unity Technologies毫无关系&a…...
知识图谱与推荐系统实战
一、传统推荐系统的“天花板”协同过滤的困境你刷电商、看视频时,推荐系统总在猜你喜欢什么。最经典的协同过滤思路是“物以类聚、人以群分”:你买过A,那么买过A的人也常买B,于是把B推给你。这套方法简单有效,但也有硬…...
抖音批量下载完整指南:3步实现无水印视频高效获取
抖音批量下载完整指南:3步实现无水印视频高效获取 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. …...
安装 KubeSphere
安装 KubeSphere KubeSphere Core (ks-core) 是 KubeSphere 的核心组件,为扩展组件提供基础的运行环境。KubeSphere Core 安装完成后,即可访问 KubeSphere Web 控制台。 1. 安装 KubeSphere Core 在集群节点上,执行以下命令安装 KubeSpher…...
多模型选型实验场景下Taotoken模型广场的价值与应用
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 多模型选型实验场景下Taotoken模型广场的价值与应用 在模型技术快速迭代的今天,无论是学术研究还是产品开发࿰…...
2026年精选AI写作辅助网站合集(实测甄选版)
为解决学术写作中效率与合规两大核心痛点,以下精选8款高适配性 AI 论文写作工具(按综合优先级排序),围绕中文学术规范适配、真实参考文献生成、格式标准化、高性价比四大核心维度筛选,同时配套分场景精准选型方案与学术…...
