用户中心(一):技术选型
项目技术选型
- 前端技术:Vue 3+ axios
- 后端技术:Spring Boot + Spring Security
- 数据库:MySQL数据库
- 数据层框架:MyBatis Plus
前端技术简介
Vue3 简介
Vue 3 是渐进式前端框架的最新正式版本(当前稳定版为 3.4+),于 2020 年发布。它在性能、开发体验和扩展性上全面升级,同时保留 Vue 2 的易用性。
三大核心亮点
🚀 性能飞跃
- 重写虚拟 DOM(Diff 算法优化)
- 基于
Proxy的响应式系统(性能提升 + 支持 Map/Set 等数据结构) - 打包体积减少(Tree-shaking 支持,按需引入)
🎨 Composition API
- 用
setup()函数替代data/methods等选项,逻辑更聚合 - 支持灵活复用逻辑(类似 React Hooks)
- 例:
1
2
3
4
5
6import { ref, computed } from 'vue';
setup() {
const count = ref(0);
const double = computed(() => count.value * 2);
return { count, double };
}
- 用
🛠 更好的 TypeScript 支持
- 源码用 TypeScript 重写
- 提供完整的类型推断
其他关键特性
- Fragment:组件支持多根节点
- Teleport:将组件渲染到 DOM 任意位置(如弹窗)
- Suspense:异步组件加载状态管理
- 自定义渲染器:支持非 DOM 环境(如小程序、Canvas)
与 Vue 2 的兼容性
- 大多数 API 向下兼容,提供迁移工具(
@vue/compat) - 推荐新项目直接用 Vue 3 + Vite 构建工具
axios简介
axios 是一个基于 Promise 的现代化 HTTP 客户端库,专为浏览器和 Node.js 设计。它以简洁、灵活的特性成为前端开发中最流行的网络请求工具之一。
核心特点
跨平台支持
- 在浏览器中基于
XMLHttpRequest发起请求 - 在 Node.js 中基于
http模块发起请求
- 在浏览器中基于
Promise API
- 所有请求返回 Promise 对象,支持
async/await,告别回调地狱
1
2
3
4
5
6
7
8async function fetchData() {
try {
const response = await axios.get('/api/data');
console.log(response.data);
} catch (error) {
console.error('请求失败', error);
}
}- 所有请求返回 Promise 对象,支持
拦截器机制
- 全局拦截请求和响应(如添加 Token、统一报错处理)
1
2
3
4
5
6
7
8
9
10
11// 请求拦截器
axios.interceptors.request.use(config => {
config.headers.Authorization = 'Bearer xxx';
return config;
});
// 响应拦截器
axios.interceptors.response.use(
response => response.data, // 直接返回核心数据
error => { /* 统一处理错误 */ }
);自动转换数据
- 自动将请求数据转换为 JSON(
application/json) - 自动解析响应 JSON 为 JavaScript 对象
- 自动将请求数据转换为 JSON(
取消请求
- 使用
CancelToken或 AbortController 中止正在进行的请求
1
2
3
4const controller = new AbortController();
axios.get('/api/data', { signal: controller.signal });
// 取消请求
controller.abort();- 使用
并发处理
axios.all()+axios.spread()处理并行请求
1
2
3
4const [userRes, orderRes] = await axios.all([
axios.get('/user'),
axios.get('/orders')
]);
基础使用示例
1 | // 发起 GET 请求 |
为什么选择 axios?
| 特性 | 原生 fetch |
axios |
|---|---|---|
| 浏览器兼容性 | 现代浏览器(需 polyfill) | 广泛支持(包括 IE11) |
| 请求取消 | 需手动实现(AbortController) | 内置支持 |
| 超时设置 | 不支持 | 直接配置 timeout 参数 |
| 拦截器 | 无 | 完整拦截器体系 |
| 请求进度 | 需手动实现 | 支持上传/下载进度监听 |
安装
1 | npm install axios |
适用场景
- Vue/React/Angular 项目中的 API 调用
- Node.js 后端服务调用第三方接口
- 需要统一管理 HTTP 逻辑的企业级应用
后端技术简介
SpringBoot简介
Spring Boot 是 Java 领域最流行的微服务框架,由 Pivotal 团队开发(基于 Spring 框架)。它通过 “约定优于配置” 的设计理念,极大简化了 Spring 应用的初始搭建和开发过程。以下是其核心特点:
三大核心价值
🚀 快速启动(Standalone)
- 内嵌服务器(Tomcat/Jetty/Undertow),无需部署 WAR 包
- 只需一个
main方法即可启动项目:1
2
3
4
5
6
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args); // 一行代码启动服务
}
}
🧩 自动配置(Auto-Configuration)
- 根据项目依赖 智能装配 Bean(如引入
spring-boot-starter-web自动配置 MVC) - 通过
@EnableAutoConfiguration激活,避免手动编写 XML 配置
- 根据项目依赖 智能装配 Bean(如引入
📦 起步依赖(Starter POMs)
- 预置常用依赖组合(如
spring-boot-starter-data-jpa包含 JPA + Hibernate + 连接池) - 解决传统 Spring 的依赖冲突问题
- 预置常用依赖组合(如
核心特性详解
| 特性 | 说明 |
|---|---|
| 内嵌容器 | 默认集成 Tomcat(可切换 Jetty/Undertow),无需外部服务器 |
| Actuator 监控 | 提供 HTTP 端点监控应用状态(健康检查、性能指标、配置信息) |
| 外部化配置 | 支持 application.yml 多环境配置(dev/test/prod),优先级灵活覆盖 |
| 生产就绪特性 | 健康检查、指标收集、审计日志集中管理 |
| 简化安全控制 | 通过 spring-boot-starter-security 快速集成 Spring Security |
| 丰富的 Starter | 覆盖 Web、数据访问、消息队列、缓存等 100+ 官方/第三方 Starter |
开发效率对比(Spring Boot vs 传统 Spring)
| 任务 | 传统 Spring | Spring Boot |
|---|---|---|
| 创建项目 | 手动配置依赖 + XML | 选择 Starter(秒级生成) |
| 启动服务器 | 需部署到外部 Tomcat | main() 直接运行 |
| 数据源配置 | 手动定义 Bean + XML | 自动配置(仅需写 url/密码) |
| 监控管理 | 需额外集成 | Actuator 开箱即用 |
典型应用场景
- RESTful API 服务(结合 Spring MVC)
- 微服务架构(配合 Spring Cloud)
- 批处理任务(使用
spring-boot-starter-batch) - 实时数据处理(集成 Kafka/RabbitMQ Starter)
代码示例:5 分钟创建 REST 接口
1 |
|
生态与版本
- 最新稳定版:Spring Boot 3.x(需 Java 17+)
- 长期支持版:Spring Boot 2.7.x(Java 8+)
- 开发工具:
- start.spring.io(项目脚手架)
- Spring Tools Suite(IDE 插件)
💡 总结:
Spring Boot 通过 自动化配置 + 内嵌容器 + Starter 依赖,将 Spring 从“配置地狱”中解放出来,使开发者能专注于业务逻辑,成为 Java 微服务开发的事实标准。
Spring Security 简介
Spring Security 是 Spring 生态中功能最全面的安全框架,专为 Java 应用提供认证(Authentication) 和 授权(Authorization) 能力。它不仅保护 Web 请求,还支持方法级安全、OAuth2、JWT 等现代安全方案,是企业级应用的安全基石。
核心功能
| 能力 | 说明 |
|---|---|
| 身份认证 | 支持表单登录、HTTP Basic、LDAP、OAuth2、JWT 等多种登录方式 |
| 访问控制 | 基于角色(RBAC)、权限表达式(如 hasRole('ADMIN'))控制资源访问 |
| 会话管理 | 防御会话固定攻击、支持集群会话存储(Redis) |
| CSRF 防护 | 自动验证请求令牌(默认开启) |
| CORS 配置 | 跨域资源共享的安全策略管理 |
| 安全头注入 | 自动添加 X-Content-Type-Options、Strict-Transport-Security 等安全头 |
| 漏洞防护 | 防御 XSS、点击劫持、暴力破解等常见攻击 |
核心架构
graph LR A[客户端请求] --> B[Security Filter Chain] B --> C[认证过滤器] --> D[AuthenticationManager] D --> E[UserDetailsService] E --> F[数据库/LDAP/等] B --> G[授权过滤器] --> H[AccessDecisionManager] H --> I[权限决策]
过滤器链(Filter Chain)
Spring Security 本质是一组过滤器,按顺序拦截请求(如UsernamePasswordAuthenticationFilter处理登录)。认证流程
- 用户提交凭证 →
AuthenticationManager调用UserDetailsService加载用户数据 → 验证密码/状态 → 生成Authentication对象存入安全上下文。
- 用户提交凭证 →
授权流程
- 访问受限资源时 →
AccessDecisionManager根据配置的规则(如@PreAuthorize("hasAuthority('WRITE')"))决定是否放行。
- 访问受限资源时 →
关键组件
| 组件 | 作用 |
|---|---|
SecurityFilterChain |
定义安全过滤器链(Spring Boot 自动配置默认链) |
UserDetailsService |
加载用户数据(需自定义实现数据库查询等逻辑) |
PasswordEncoder |
密码加密器(推荐 BCryptPasswordEncoder) |
AuthenticationProvider |
自定义认证逻辑(如短信登录) |
SecurityContextHolder |
存储当前用户的安全上下文(默认基于 ThreadLocal) |
集成 Spring Boot 示例
1. 基础配置
1 |
|
2. 自定义用户查询
1 |
|
高级特性
OAuth2 集成
- 快速实现第三方登录(GitHub/Google)或构建自己的授权服务器。
1
2
3
// 启用 OAuth2
public class OAuthConfig extends WebSecurityConfigurerAdapter { ... }方法级安全控制
- 在 Service 层使用注解精确控制权限:
1
2
public void deleteUser(Long userId) { ... }JWT 支持
- 通过过滤器实现无状态 Token 认证(搭配
jjwt库):
1
2
3
4
5
6
7
8
9
10
11public class JwtFilter extends OncePerRequestFilter {
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) {
String token = extractToken(request);
if (tokenValid(token)) {
Authentication auth = createAuthentication(token);
SecurityContextHolder.getContext().setAuthentication(auth);
}
chain.doFilter(request, response);
}
}- 通过过滤器实现无状态 Token 认证(搭配
适用场景
- 企业后台管理系统(RBAC 权限控制)
- 微服务 API 安全(JWT + OAuth2)
- 金融/政府等合规性要求高的系统
- 需要 SSO(单点登录)的分布式应用
💡 总结:
Spring Security 通过可扩展的架构 + 深度 Spring 集成 + 全面的安全防护,成为 Java 领域事实上的安全标准。其学习曲线较陡,但掌握了核心流程(认证→授权→防护)即可应对多数场景。
MyBatis Plus简介
MyBatis-Plus(简称 MP) 是 MyBatis 的增强工具库,在 MyBatis 基础上仅做增强不做改变,旨在简化开发、提高效率。它通过内置通用 Mapper 和 Service,实现了单表 CRUD 操作的零 SQL 编写,同时保留 MyBatis 的所有灵活性。以下是其核心特性与价值:
核心特性概览
| 特性 | 说明 |
|---|---|
| 无侵入设计 | 只做增强,不影响原生 MyBatis 功能 |
| 强大的 CRUD 接口 | 内置 BaseMapper + IService,单表操作免 SQL |
| Lambda 表达式支持 | 避免字段硬编码(如 LambdaQueryWrapper<User>) |
| 自动分页插件 | 无缝整合 PageHelper,支持多种数据库分页 |
| 代码生成器 | 一键生成 Entity、Mapper、Service、Controller 等全套代码 |
| 全局拦截器 | 支持 SQL 性能分析、租户隔离、数据权限控制等扩展 |
| 多租户支持 | 通过插件实现数据隔离(基于 Schema 或字段) |
| 乐观锁插件 | 自动处理并发冲突(@Version 注解) |
架构设计
graph TD A[开发者] --> B[MyBatis-Plus 增强] B --> C[通用 Mapper] B --> D[通用 Service] B --> E[条件构造器] B --> F[插件扩展] C --> G[MyBatis 原生接口] D --> G E --> G F --> G G --> H[数据库]
基础使用示例
1. 实体类与 Mapper
1 |
|
2. 无需 SQL 的 CRUD 操作
1 | // 插入 |
3. Service 层封装
1 | public interface UserService extends IService<User> { } // 继承通用 Service |
进阶功能
1. 代码生成器(减少 80% 手写代码)
1 | AutoGenerator generator = new AutoGenerator(); |
2. 乐观锁实现
1 |
|
3. SQL 性能分析插件
1 |
|
与原生 MyBatis 对比
| 场景 | 原生 MyBatis | MyBatis-Plus |
|---|---|---|
| 单表 CRUD | 需手写 SQL 或注解 | 内置通用接口,零 SQL |
| 条件查询 | 需在 XML 写动态 SQL | QueryWrapper 链式调用 |
| 字段引用 | 字符串硬编码(易错) | Lambda 表达式(编译期检查) |
| 分页查询 | 手动实现或集成 PageHelper | 原生支持分页插件 |
| 代码生成 | 依赖第三方工具(如 MyBatis Generator) | 内置代码生成器 |
适用场景
- 快速开发后台管理系统(减少重复 CRUD 代码)
- 微服务架构中的 DAO 层简化
- 需要快速迭代的中小型项目
- 团队统一 CRUD 规范,降低维护成本
💡 核心价值:
MyBatis-Plus 解决了 MyBatis 的“样板代码”问题,将开发者从重复的 SQL 编写中解放,同时通过插件机制保留 MyBatis 的灵活性。据统计,使用 MP 后单表操作代码量减少 70% 以上。
版本与生态
- 最新稳定版:3.5.3+(2023年)
- 依赖:仅需 MyBatis + MyBatis-Spring
- 集成支持:
- Spring Boot:
mybatis-plus-boot-starter - Spring:
mybatis-plus-core
- Spring Boot:
- 官网:https://baomidou.com/
1 | <!-- Maven 依赖 --> |
MySQL数据库简介
MySQL 是全球最流行的开源关系型数据库管理系统(RDBMS),由瑞典公司 MySQL AB 开发(现属 Oracle 旗下)。它以高性能、易用性和可靠性为核心优势,支撑了全球 80% 以上的 Web 应用,包括 Facebook、Twitter、YouTube 等巨头平台。
核心特性
| 特性 | 说明 |
|---|---|
| 开源免费 | 社区版(GPL 许可)完全免费,商业版提供高级功能和技术支持 |
| 跨平台支持 | 支持 Windows、Linux、macOS 等主流系统 |
| 高性能 | 优化存储引擎(InnoDB)、查询缓存、索引加速(B+树) |
| ACID 事务 | InnoDB 引擎严格遵循原子性、一致性、隔离性、持久性 |
| 高可用架构 | 主从复制、集群方案(InnoDB Cluster)、分区表 |
| 安全合规 | 数据加密(TLS/SSL)、账户权限管理、审计日志 |
| 易扩展 | 支持千万级数据量,分布式方案(如 Vitess、MyCat) |
核心架构
graph LR A[客户端] --> B[连接器] B --> C[查询缓存] C --> D[解析器] D --> E[优化器] E --> F[执行器] F --> G[存储引擎 InnoDB/MyISAM] G --> H[磁盘文件系统]
- 连接管理
- 连接器处理客户端通信(支持 JDBC/ODBC/Python 等驱动)
- 查询处理
- 解析器 → 语法分析 → 优化器选择索引 → 执行器调用存储引擎
- 存储引擎
- InnoDB(默认):支持事务、行级锁、外键,适合 OLTP
- MyISAM:表级锁、全文索引,适合读多写少场景(MySQL 8.0+ 已弃用)
基础操作示例
1. 数据库与表操作
1 | -- 创建数据库 |
2. 查询与索引优化
1 | -- 查询数据 |
3. 事务控制
1 | START TRANSACTION; |
应用场景
| 场景 | 技术方案 |
|---|---|
| Web 应用数据存储 | PHP + MySQL / Django + MySQL |
| 金融交易系统 | 事务 + 行级锁 + 高可用集群 |
| 实时数据分析 | 列式存储引擎 (ClickHouse 集成) |
| 云原生服务 | AWS RDS / Azure Database for MySQL |
性能优化关键
- 索引策略
- 主键索引、唯一索引、复合索引(最左前缀原则)
- 查询优化
- 避免
SELECT *→ 用EXPLAIN分析执行计划
- 避免
- 配置调优
- 调整
innodb_buffer_pool_size(通常设为物理内存 70%)
- 调整
- 分库分表
- 水平拆分(按用户 ID 分片)缓解单表压力
生态工具
| 工具 | 用途 |
|---|---|
| MySQL Workbench | 官方可视化管理工具(建模/SQL 开发) |
| phpMyAdmin | Web 版数据库管理 |
| Percona Toolkit | 高级运维工具集(监控/修复) |
| mysqldump | 命令行数据备份恢复 |
| ProxySQL | 智能读写分离代理 |
版本演进
- MySQL 5.7(主流 LTS 版本):JSON 支持、GIS 空间数据
- MySQL 8.0(推荐新项目使用):
- 窗口函数、CTE 公共表达式
- 原子 DDL(崩溃安全的表结构变更)
- 读写分离优化(
SET PERSIST动态配置) - 性能提升(速度比 5.7 快 2 倍)
对比其他数据库
| 特性 | MySQL | PostgreSQL | MongoDB |
|---|---|---|---|
| 类型 | 关系型 | 关系型 + 对象 | 文档型 NoSQL |
| 事务支持 | 完善 | 更复杂事务 | 多文档事务 |
| 扩展性 | 需分片 | 逻辑复制 | 原生分片 |
| 适用场景 | Web 应用/OLTP | 复杂分析/GIS | JSON 数据/敏捷开发 |
💡 总结:
MySQL 凭借 开源生态 + 成熟稳定 + 易用性强 成为开发者首选的数据库,尤其适合 Web 应用、中后台系统。尽管在复杂分析和大数据场景下有局限性(可搭配 ClickHouse/Doris 等),其作为 OLTP 核心存储的地位无可替代。