什么是全栈开发?
全栈 = 前端 + 后端 + 数据库 + 部署运维
全栈技术栈组成
1. 前端(已掌握)
# 基础三件套
HTML + CSS + JavaScript
# 现代框架
Vue.js / React / Angular
# 构建工具
Webpack / Vite
2. 后端(需要学习)
# 服务器语言(选一种)
Node.js / Python / Java / Go
# 框架
Express.js (Node) / Django (Python) / Spring Boot (Java)
# API 设计
RESTful API / GraphQL
3. 数据库(了解,需要学习)
# 关系型数据库
MySQL / PostgreSQL
# 非关系型数据库
MongoDB / Redis
# ORM 工具
Sequelize (Node) / Prisma
4. 部署运维(了解,需要学习)
# 服务器
Linux 基础 / Docker
# 部署平台
Vercel / Netlify / 阿里云
# 监控
日志分析 / 性能监控
我最后选择的路线
前端: Vue.js (已掌握)
后端: Java Spring Boot
数据库: MySQL
部署: Docker + Nginx
Spring Boot 基础概念
什么是 Spring Boot?
// 简单的 Spring Boot 应用
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
核心特性
- 自动配置 :减少 XML 配置
- 内嵌服务器 :无需外部 Tomcat
- 起步依赖 :快速集成各种功能
- 生产就绪 :监控、健康检查等
项目结构设计
标准 Spring Boot 项目结构
src/
├── main/
│ ├── java/
│ │ └── com/yourcompany/
│ │ ├── Application.java # 启动类
│ │ ├── controller/ # 控制器层
│ │ ├── service/ # 业务逻辑层
│ │ ├── repository/ # 数据访问层
│ │ └── entity/ # 实体类
│ └── resources/
│ ├── application.yml # 配置文件
│ └── static/ # 静态资源
└── test/ # 测试代码
数据库设计(MySQL)
实体关系示例
-- 用户表
CREATE TABLE users (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) UNIQUE NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
password VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- 文章表
CREATE TABLE articles (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(200) NOT NULL,
content TEXT NOT NULL,
author_id BIGINT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (author_id) REFERENCES users(id)
);
Spring Boot 代码实现
1. 实体类(Entity)
// User.java
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(unique = true, nullable = false)
private String username;
@Column(unique = true, nullable = false)
private String email;
@Column(nullable = false)
private String password;
@CreationTimestamp
private LocalDateTime createdAt;
@UpdateTimestamp
private LocalDateTime updatedAt;
// Getter/Setter 方法
}
2. 数据访问层(Repository)
// UserRepository.java
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
// 根据用户名查找用户
Optional<User> findByUsername(String username);
// 根据邮箱查找用户
Optional<User> findByEmail(String email);
// 检查用户名是否存在
boolean existsByUsername(String username);
}
3. 业务逻辑层(Service)
// UserService.java
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
@Autowired
private PasswordEncoder passwordEncoder;
public User createUser(User user) {
// 密码加密
user.setPassword(passwordEncoder.encode(user.getPassword()));
return userRepository.save(user);
}
public Optional<User> getUserById(Long id) {
return userRepository.findById(id);
}
public List<User> getAllUsers() {
return userRepository.findAll();
}
}
4. 控制器层(Controller)
// UserController.java
@RestController
@RequestMapping("/api/users")
public class UserController {
@Autowired
private UserService userService;
// 获取所有用户
@GetMapping
public ResponseEntity<List<User>> getAllUsers() {
List<User> users = userService.getAllUsers();
return ResponseEntity.ok(users);
}
// 创建用户
@PostMapping
public ResponseEntity<User> createUser(@RequestBody User user) {
User savedUser = userService.createUser(user);
return ResponseEntity.status(HttpStatus.CREATED).body(savedUser);
}
// 根据ID获取用户
@GetMapping("/{id}")
public ResponseEntity<User> getUserById(@PathVariable Long id) {
Optional<User> user = userService.getUserById(id);
return user.map(ResponseEntity::ok)
.orElse(ResponseEntity.notFound().build());
}
}
前后端数据交互
API 设计规范
# 用户相关 API
GET /api/users # 获取用户列表
POST /api/users # 创建用户
GET /api/users/{id} # 获取用户详情
PUT /api/users/{id} # 更新用户
DELETE /api/users/{id} # 删除用户
# 文章相关 API
GET /api/articles
POST /api/articles
GET /api/articles/{id}
PUT /api/articles/{id}
DELETE /api/articles/{id}
前端调用示例(Vue.js)
// api/user.js
import axios from 'axios'
const API_BASE_URL = 'http://localhost:8080/api'
export const userApi = {
// 获取用户列表
getUsers() {
return axios.get(`${API_BASE_URL}/users`)
},
// 创建用户
createUser(userData) {
return axios.post(`${API_BASE_URL}/users`, userData)
},
// 获取用户详情
getUserById(id) {
return axios.get(`${API_BASE_URL}/users/${id}`)
}
}
Vue 组件调用
<template>
<div>
<h2>用户管理</h2>
<button @click="loadUsers">加载用户</button>
<ul>
<li v-for="user in users" :key="user.id">
{{ user.username }} - {{ user.email }}
</li>
</ul>
</div>
</template>
<script>
import { userApi } from '@/api/user'
export default {
data() {
return {
users: []
}
},
methods: {
async loadUsers() {
try {
const response = await userApi.getUsers()
this.users = response.data
} catch (error) {
console.error('加载用户失败:', error)
}
}
}
}
</script>
配置文件
application.yml
# 开发环境配置
spring:
datasource:
url: jdbc:mysql://localhost:3306/your_database
username: your_username
password: your_password
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
hibernate:
ddl-auto: update
show-sql: true
properties:
hibernate:
dialect: org.hibernate.dialect.MySQL8Dialect
server:
port: 8080
# 跨域配置
cors:
allowed-origins: "http://localhost:3000"
跨域配置
// CorsConfig.java
@Configuration
public class CorsConfig {
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurer() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/api/**")
.allowedOrigins("http://localhost:3000")
.allowedMethods("GET", "POST", "PUT", "DELETE")
.allowedHeaders("*");
}
};
}
}
依赖管理(pom.xml)
核心依赖
<dependencies>
<!-- Spring Boot Starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 数据访问 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- MySQL 驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
<!-- 密码加密 -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-crypto</artifactId>
</dependency>
</dependencies>
开发工具和环境
推荐开发工具
- IDE : IntelliJ IDEA (推荐) 或 Eclipse
- 数据库工具 : MySQL Workbench 或 Navicat
- API 测试 : Postman 或 Insomnia
环境搭建步骤
# 1. 安装 Java 17+ 和 Maven
# 2. 安装 MySQL 8.0+
# 3. 创建数据库
CREATE DATABASE your_database;
# 4. 启动 Spring Boot 应用
mvn spring-boot:run
# 5. 启动前端应用
npm run dev
今日学习完毕~