# backend 项目目录介绍(管理系统后端)
> 路径:
>
> `F:\workplase\backend`
>
> | 技术栈:Spring Boot 3.5.4 + MyBatis 3.0.4 + MySQL 8.4 + JWT
> 端口:8080 | 启动类:
>
> `ManagementApplication`
## 一、整体架构
经典三层架构 + 分层包设计,请求流转:**Controller(控制层)→ Service(业务层)→ Mapper(数据访问层)→ MySQL**
```
前端(Vue3) ──HTTP/JSON──▶ Controller ──▶ Service ──▶ Mapper(MyBatis注解SQL) ──▶ MySQL
│ ▲
│ └─ JwtInterceptor(登录校验拦截)
▼
Result 统一响应包装
```
* 全部接口返回统一结构 `Result`(code / message / data)
* 除登录 / 注册外,所有接口都经过 JWT 拦截器校验(`Authorization: Bearer <token>`)
* 密码使用 SHA-256 哈希存储,不存明文
## 二、目录结构总览
```
backend/
├── pom.xml # Maven 构建配置(依赖、插件)
├── settings-mirror.xml # 阿里云镜像仓库配置(加速下载)
└── src/
└── main/
├── java/com/mgmt/system/
│ ├── ManagementApplication.java # 启动类(入口)
│ ├── common/ # 公共组件: 统一响应/异常/分页
│ ├── config/ # 配置: JWT拦截器、Web配置
│ ├── controller/ # 控制层(5个): 接收请求、返回响应
│ ├── dto/ # 数据传输对象(请求/响应模型)
│ ├── entity/ # 实体类(对应6张数据库表)
│ ├── mapper/ # 数据访问层(MyBatis注解SQL)
│ ├── service/ # 业务逻辑层(5个业务服务)
│ └── util/ # 工具类: JWT生成校验、密码加密
└── resources/
└── application.yml # 应用配置(端口/数据库/JWT)
```
> `target/`
>
> (编译产物)和
>
> `.idea/`
>
> (IDEA 配置)为自动生成目录,不属于源码。
## 三、各层详解
### 1. 启动类 `ManagementApplication.java`
```
@SpringBootApplication
@MapperScan("com.mgmt.system.mapper") // 扫描所有 Mapper 接口
public class ManagementApplication { public static void main(String[] args) { ... } }
```
IDEA 中右键 → Run 即启动后端,成功后控制台显示 `Started ... port 8080`。
### 2. common — 公共组件(4 个类)
| 类 | 作用 |
| ------------------------ | ----------------------------------------- |
| `Result` | 统一响应体:`{code, message, data}`,成功 code=200 |
| `PageResult` | 分页结果封装:`{total, list}` |
| `BizException` | 业务异常(手动抛出,如 "用户名或密码错误") |
| `GlobalExceptionHandler` | 全局异常处理器:统一捕获异常并转为 Result 返回,避免报错信息裸奔 |
### 3. config — 配置层(2 个类)
| 类 | 作用 |
| ---------------- | ----------------------------------- |
| `JwtInterceptor` | JWT 登录拦截器:校验请求头 token,非法 / 过期返回 401 |
| `WebConfig` | 注册拦截器 + 跨域配置(CORS,允许前端 5173 访问) |
### 4. controller — 控制层(5 个接口入口)
| 类 | 路径前缀 | 功能 |
| --------------------- | ---------------- | ------------------------------- |
| `AuthController` | `/api/auth` | 登录、获取当前用户信息、退出 |
| `UserController` | `/api/users` | 用户增删改查、分页、重置密码、分配角色 |
| `RoleController` | `/api/roles` | 角色增删改查 |
| `MenuController` | `/api/menus` | 菜单树查询 |
| `DashboardController` | `/api/dashboard` | 首页统计(用户 / 角色 / 菜单数、用户状态分布)、操作日志 |
### 5. dto — 数据传输对象(4 个类)
| 类 | 用途 |
| --------------- | -------------------------- |
| `LoginRequest` | 登录请求参数(username/password) |
| `LoginResponse` | 登录响应(token + 用户信息 + 菜单树) |
| `UserDTO` | 用户新增 / 修改的入参(含密码、角色 ID 列表) |
| `MenuTreeVO` | 菜单树视图对象(含 children 递归结构) |
### 6. entity — 实体类(6 个,与数据库表一一对应)
| 实体 | 对应表 | 说明 |
| ----------------- | ------------------- | ----------------------------------------------- |
| `SysUser` | sys\_user | 用户(username、password、real\_name、status 等) |
| `SysRole` | sys\_role | 角色(role\_name、role\_code) |
| `SysMenu` | sys\_menu | 菜单(menu\_name、path、icon、parent\_id、sort\_order) |
| `SysUserRole` | sys\_user\_role | 用户 - 角色关联 |
| `SysRoleMenu` | sys\_role\_menu | 角色 - 菜单关联 |
| `SysOperationLog` | sys\_operation\_log | 操作日志(预留) |
### 7. mapper — 数据访问层(6 个接口,MyBatis 注解 SQL)
| 接口 | 说明 |
| ----------------------- | ------------------------------- |
| `SysUserMapper` | 用户增删改查、按关键词分页、按状态统计、查角色 ID、更新密码 |
| `SysRoleMapper` | 角色 CRUD、查询角色列表 |
| `SysMenuMapper` | 菜单 CRUD、按角色查询菜单、查询全部菜单 |
| `SysUserRoleMapper` | 用户角色关系维护 |
| `SysRoleMenuMapper` | 角色菜单关系维护 |
| `SysOperationLogMapper` | 操作日志记录查询 |
> 使用注解式 SQL(
>
> `@Select`
>
> /
>
> `@Insert`
>
> 等),无需 XML 文件;
>
> `map-underscore-to-camel-case`
>
> 自动将
>
> `real_name`
>
> 映射为
>
> `realName`
>
> 。
### 8. service — 业务逻辑层(5 个服务)
| 服务 | 核心业务 |
| ------------------ | ------------------------ |
| `AuthService` | 登录校验、签发 JWT、获取用户信息 + 菜单树 |
| `UserService` | 用户 CRUD、分页搜索、重置密码、角色分配 |
| `RoleService` | 角色 CRUD、角色分配菜单 |
| `MenuService` | 菜单树组装(父子递归) |
| `DashboardService` | 首页统计汇总(数量统计 + 用户状态分布) |
### 9. util — 工具类(2 个)
| 类 | 作用 |
| -------------- | ------------------------------------------- |
| `JwtUtil` | 生成 / 解析 JWT(密钥来自 application.yml,有效期 24 小时) |
| `PasswordUtil` | SHA-256 加密密码、校验密码 |
### 10. resources/application.yml — 核心配置
```
server:
port: 8080 # 后端端口
spring:
datasource: # 数据库连接(127.0.0.1:3306/mgmt_system, root/root)
jackson:
date-format: yyyy-MM-dd HH:mm:ss # 时间序列化格式
jwt:
secret: mgmt-system-... # JWT 密钥(演示用, 生产需更换)
expire-hours: 24 # token 有效期 24 小时
```
## 四、pom.xml 依赖清单
| 依赖 | 版本 | 用途 |
| ------------------------------ | --------- | ----------------- |
| spring-boot-starter-web | 3.5.4 | Web 框架(内嵌 Tomcat) |
| spring-boot-starter-validation | 3.5.4 | 参数校验注解(@Valid) |
| mybatis-spring-boot-starter | 3.0.4 | MyBatis 持久层 |
| mysql-connector-j | 随 Boot 管理 | MySQL 驱动 |
| jjwt (api/impl/jackson) | 0.12.6 | JWT 生成与校验 |
| lombok | 1.18.48 | 简化实体类代码(@Data 等) |
**特别说明(JDK 25 兼容)**:pom 中已配置 `lombok.version=1.18.48` + maven-compiler-plugin `<proc>full</proc>`—— 因为 JDK 24+ 默认关闭注解处理,不配置会导致 Lombok 生成的方法缺失、编译报 "找不到符号"。这是本项目踩过并修复的坑。
## 五、一次登录请求的完整流转(示例)
```
1. POST /api/auth/login {username, password}
2. AuthController 接收 → 调 AuthService
3. AuthService: PasswordUtil 校验密码 → JwtUtil 签发 token → 查角色+菜单树
4. 返回 LoginResponse {token, user, menus}
5. 前端保存 token, 后续请求带 Authorization: Bearer <token>
6. 其他请求 → JwtInterceptor 校验 token → 通过 → 进入 Controller → Service → Mapper
```
## 六、启动与常用命令
```
# IDEA 运行: 右键 ManagementApplication → Run
# 或命令行:
mvn -s settings-mirror.xml clean package -DskipTests # 打包
java -jar target/system-backend-1.0.0.jar # 启动(8080)
```
接口完整说明见 `docs/API文档.md`。