马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
目次
- 整体架构概述
- 技术栈说明
- 数据库计划规范
- Spring Boot 后端架构
- Vue 前端架构
- 完备交互流程
- 关键技术实现细节
- 安全与性能优化
- 异常处理机制
整体架构概述
- graph TD
- A[Vue 前端] -->|HTTP 请求| B(Spring Boot 后端)
- B -->|JDBC/ORM| C[(数据库)]
- C -->|返回数据| B
- B -->|JSON 响应| A
- A -->|状态管理| D[Vuex Store]
- B -->|缓存| E[Redis]
- B -->|消息队列| F[RabbitMQ/Kafka]
复制代码 技术栈说明
数据库层
- MySQL 8.0+:关系型数据库
- MongoDB 4.4+:非结构化数据存储
- Redis 6+:缓存数据库
- 连接池:HikariCP
- ORM:MyBatis-Plus 或 Spring Data JPA
后端层
- 核心框架:Spring Boot 2.7+
- 安全框架:Spring Security + JWT
- API 文档:Swagger/OpenAPI 3.0
- 构建工具:Maven/Gradle
- 其他组件:
- Spring Cache
- Spring Validation
- Spring Batch(批处理)
- Quartz Scheduler(定时任务)
前端层
- 核心框架:Vue 3 + Composition API
- 状态管理:Vuex/Pinia
- UI 框架:Element Plus/Ant Design Vue
- 路由管理:Vue Router 4
- 请求库:Axios
- 构建工具:Vite 4+
数据库计划规范
计划步骤
- 需求分析 →ER图计划 →范式化计划 →反范式优化 →索引策略 →分库分表规划
表结构示例
- CREATE TABLE `sys_user` (
- `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
- `username` VARCHAR(50) NOT NULL UNIQUE COMMENT '登录账号',
- `password` VARCHAR(100) NOT NULL COMMENT '加密后的密码',
- `nickname` VARCHAR(50) COMMENT '用户昵称',
- `email` VARCHAR(100) COMMENT '电子邮箱',
- `status` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '状态 0-禁用 1-正常',
- `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
- `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
- PRIMARY KEY (`id`),
- INDEX `idx_username` (`username`),
- INDEX `idx_email` (`email`)
- ) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
复制代码 索引策略
• 组合索引遵照最左前缀原则
• WHERE 条件中的高筛选率字段优先
• 制止在频仍更新的字段上建索引
• 使用覆盖索引优化查询性能
Spring Boot 后端架构
分层结构
- src/main/java
- ├── config // 配置类
- ├── controller // REST API 入口
- ├── service // 业务逻辑层
- │ ├── impl // 接口实现
- ├── dao/repository // 数据访问层
- ├── entity/domain // 实体类
- ├── dto // 数据传输对象
- ├── vo // 视图对象
- ├── exception // 自定义异常
- ├── interceptor // 拦截器
- ├── filter // 过滤器
- └── util // 工具类
复制代码 典型 Controller 示例
- @RestController
- @RequestMapping("/api/users")
- @Tag(name = "用户管理", description = "用户相关操作")
- public class UserController {
- @Autowired
- private UserService userService;
- @PostMapping
- @Operation(summary = "创建用户")
- public ResponseEntity<ResultVO<UserVO>> createUser(@Valid @RequestBody UserCreateDTO dto) {
- UserVO createdUser = userService.createUser(dto);
- return ResponseEntity.created(URI.create("/users/"+createdUser.getId()))
- .body(ResultVO.success(createdUser));
- }
- @GetMapping("/{id}")
- @Operation(summary = "获取用户详情")
- public ResponseEntity<ResultVO<UserVO>> getUserById(@PathVariable Long id) {
- return ResponseEntity.ok(ResultVO.success(userService.getUserById(id)));
- }
- }
复制代码 Vue 前端架构
项目结构
- src/
- ├── api/ // 接口定义
- ├── assets/ // 静态资源
- ├── components/ // 公共组件
- ├── router/ // 路由配置
- ├── store/ // Vuex 状态管理
- ├── utils/ // 工具函数
- ├── views/ // 页面组件
- └── main.js // 入口文件
复制代码 典型 API 调用
- // api/user.js
- import request from '@/utils/request'
- export function login(data) {
- return request({
- url: '/auth/login',
- method: 'post',
- data
- })
- }
- export function getUserInfo() {
- return request({
- url: '/api/users/me',
- method: 'get'
- })
- }
复制代码 Axios 拦截器设置
- // utils/request.js
- const service = axios.create({
- baseURL: process.env.VUE_APP_BASE_API,
- timeout: 10000
- })
- // 请求拦截
- service.interceptors.request.use(
- config => {
- if (store.getters.token) {
- config.headers['Authorization'] = 'Bearer ' + getToken()
- }
- return config
- },
- error => {
- return Promise.reject(error)
- }
- )
- // 响应拦截
- service.interceptors.response.use(
- response => {
- const res = response.data
- if (res.code !== 200) {
- Message.error(res.message || 'Error')
- return Promise.reject(new Error(res.message || 'Error'))
- } else {
- return res.data
- }
- },
- error => {
- Message.error(error.message)
- return Promise.reject(error)
- }
- )
复制代码 完备交互流程
1. 用户操作触发
- <template>
- <el-button @click="handleSubmit">提交</el-button>
- </template>
- <script setup>
- const handleSubmit = async () => {
- try {
- await formRef.value.validate()
- const res = await api.createUser(formData.value)
- // 处理成功逻辑
- } catch (error) {
- // 错误处理
- }
- }
- </script>
复制代码 2. API 请求发送
- POST /api/users HTTP/1.1
- Content-Type: application/json
- Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
- {
- "username": "testuser",
- "password": "P@ssw0rd!"
- }
复制代码 3. Spring Boot 处理流程
- sequenceDiagram
- participant C as Controller
- participant S as Service
- participant D as DAO
- participant DB as Database
-
- C->>S: 接收DTO并校验
- S->>D: 调用数据访问方法
- D->>DB: 执行SQL
- DB-->>D: 返回结果集
- D-->>S: 返回Entity
- S->>S: 业务逻辑处理
- S->>C: 返回VO对象
- C-->>Client: 封装ResultVO响应
复制代码 4. 数据库事件处理
- @Transactional(rollbackFor = Exception.class)
- public UserVO createUser(UserCreateDTO dto) {
- // 1. 数据校验
- validateUserInfo(dto);
-
- // 2. 转换对象
- User user = convertToEntity(dto);
-
- // 3. 保存到数据库
- userRepository.save(user);
-
- // 4. 发送领域事件
- eventPublisher.publishEvent(new UserCreatedEvent(user));
-
- return convertToVO(user);
- }
复制代码 5. 相应处理与状态更新
- .then(response => {
- // 更新本地状态
- store.commit('user/addUser', response.data)
- // 刷新列表数据
- fetchUserList()
- // 提示成功
- ElMessage.success('创建成功')
- })
复制代码 关键技术实现细节
鉴权与安全
JWT 验证流程
- graph LR
- A[登录请求] --> B[验证用户名密码]
- B --> C[生成JWT]
- C --> D[返回Token给客户端]
- D --> E[后续请求携带Token]
- E --> F[验证Token有效性]
- F --> G[访问受保护资源]
复制代码 Spring Security 设置
- @Configuration
- @EnableWebSecurity
- public class SecurityConfig extends WebSecurityConfigurerAdapter {
-
- @Override
- protected void configure(HttpSecurity http) throws Exception {
- http
- .csrf().disable()
- .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
- .and()
- .authorizeRequests()
- .antMatchers("/auth/**").permitAll()
- .antMatchers("/api/**").authenticated()
- .and()
- .addFilterBefore(jwtAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class);
- }
- }
复制代码 文件上传处理
后端接收文件
- @PostMapping("/upload")
- public ResultVO<String> uploadFile(@RequestParam("file") MultipartFile file) {
- String filePath = fileStorageService.store(file);
- return ResultVO.success(filePath);
- }
复制代码 前端上传组件
- <template>
- <el-upload
- action="/api/upload"
- :before-upload="beforeUpload"
- :on-success="handleSuccess">
- <el-button type="primary">点击上传</el-button>
- </el-upload>
- </template>
复制代码 安全与性能优化
安全措施
- SQL 注入防护
- 使用预编译语句(MyBatis #{} 语法)
- 启用Druid SQL防火墙
- XSS 防护
- 前端使用DOMPurify过滤HTML
- 后端设置Http头
- http.headers()
- .xssProtection()
- .and()
- .contentSecurityPolicy("script-src 'self'");
复制代码
性能优化
- 二级缓存设置(MyBatis)
- <cache eviction="LRU" flushInterval="60000" size="512" readOnly="true"/>
复制代码 - 接口相应优化
- @Query("SELECT new com.example.dto.UserDTO(u.id, u.username) FROM User u")
- List<UserDTO> findAllUserDTOs();
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |