全栈开发入门学习指南(前端)

什么是全栈开发?

全栈 = 前端 + 后端 + 数据库 + 部署运维

全栈技术栈组成

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

今日学习完毕~

相关推荐
阳火锅16 分钟前
Element / AntD 官方都没做好的功能,被这个开源小插件搞定了!
前端·vue.js·面试
大阳光男孩17 分钟前
Uniapp+Vue3树形选择器
前端·javascript·uni-app
沙振宇22 分钟前
【Web】使用Vue3+PlayCanvas开发3D游戏(九)纹理视觉效果
前端·游戏·3d·纹理
前端 贾公子23 分钟前
uniapp中@input修改input内容不生效 | 过滤赋值无效 | 连续非法字符不更新的问题
开发语言·前端·javascript
蓝悦28 分钟前
用 .bat 一键启动 Jupyter:多环境切换
后端
写不来代码的草莓熊28 分钟前
el-date-picker ,自定义输入数字自动转换显示yyyy-mm-dd HH:mm:ss格式 【仅双日历 datetimerange专用】
开发语言·前端·javascript
绺年28 分钟前
关于 mac 使用ssh配置
前端
LDX前端校草29 分钟前
verdaccio数据迁移
前端
何陋轩30 分钟前
Netty高性能网络编程深度解析:把网络框架核心讲透,让面试官刮目相看
后端·面试
落木萧萧82531 分钟前
为什么我又写了一个 ORM 框架(MyBatisGX)
后端·架构