基于Spring Boot 构建现代化短视频平台:HBC Video全栈开发实战

发布于:2025-06-30 ⋅ 阅读:(16) ⋅ 点赞:(0)

基于Spring Boot 构建现代化短视频平台:HBC Video全栈开发实战

前言

随着短视频行业的蓬勃发展,越来越多的开发者希望能够构建属于自己的短视频平台。本文将详细介绍如何使用Spring Boot 3.2.7 + Java 17 + MyBatis Plus构建一个功能完整的短视频平台系统——HBC Video。

该项目不仅包含了短视频平台的核心功能,还采用了现代化的技术栈和最佳实践,是学习全栈开发的绝佳案例。

项目概述

HBC Video是一个基于Spring Boot的现代化短视频平台,具备以下核心功能:

  • 🎬 视频管理:视频上传、播放、搜索、分类
  • 👥 用户系统:注册登录、个人资料、关注/粉丝
  • 💬 互动功能:点赞、评论、收藏、分享
  • 🔔 消息通知:系统通知、互动消息
  • 👨‍💼 后台管理:用户管理、内容审核、数据统计
  • 📱 响应式UI:现代化界面设计,支持多端适配

技术选型

后端技术栈

<!-- 核心框架 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>3.2.7</version>
</dependency>

<!-- 数据持久化 -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.8</version>
</dependency>

<!-- API文档 -->
<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
    <version>4.4.0</version>
</dependency>

前端技术栈

  • LayUI 2.9.18:轻量级前端框架
  • 原生JavaScript:现代化ES6+语法
  • 响应式设计:适配各种设备尺寸

技术选型理由

  1. Spring Boot 3.2.7 + Java 17

    • 长期支持版本,稳定可靠
    • 原生GraalVM支持,性能优异
    • 完善的生态系统
  2. MyBatis Plus

    • 强大的代码生成能力
    • 丰富的内置方法
    • 灵活的条件构造器
  3. LayUI

    • 轻量级,易于上手
    • 丰富的组件库
    • 良好的兼容性

系统架构设计

整体架构

┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐
│                 │    │                 │    │                 │
│   前端展示层     │────│   控制器层       │────│   服务层         │
│   (LayUI)       │    │  (Controller)   │    │   (Service)     │
│                 │    │                 │    │                 │
└─────────────────┘    └─────────────────┘    └─────────────────┘
                                                        │
                       ┌─────────────────┐    ┌─────────────────┐
                       │                 │    │                 │
                       │   数据访问层     │────│   数据库层       │
                       │   (Mapper)      │    │   (MySQL)       │
                       │                 │    │                 │
                       └─────────────────┘    └─────────────────┘

分层设计

  1. Controller层:处理HTTP请求,参数验证
  2. Service层:业务逻辑处理,事务管理
  3. Mapper层:数据访问操作,SQL映射
  4. Entity层:实体类定义,数据模型

数据库设计

核心表结构

-- 用户表
CREATE TABLE users (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) UNIQUE NOT NULL,
    email VARCHAR(100) UNIQUE NOT NULL,
    password VARCHAR(255) NOT NULL,
    nickname VARCHAR(50),
    avatar VARCHAR(255),
    bio TEXT,
    followers_count INT DEFAULT 0,
    following_count INT DEFAULT 0,
    videos_count INT DEFAULT 0,
    status TINYINT DEFAULT 1,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

-- 视频表
CREATE TABLE videos (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    title VARCHAR(255) NOT NULL,
    description TEXT,
    video_url VARCHAR(500) NOT NULL,
    cover_url VARCHAR(500),
    user_id BIGINT NOT NULL,
    category_id BIGINT,
    duration INT,
    views_count INT DEFAULT 0,
    likes_count INT DEFAULT 0,
    comments_count INT DEFAULT 0,
    favorites_count INT DEFAULT 0,
    status TINYINT DEFAULT 1,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id),
    FOREIGN KEY (category_id) REFERENCES categories(id)
);

数据库设计亮点

  1. 合理的索引设计:为查询频繁的字段添加索引
  2. 外键约束:保证数据完整性
  3. 计数字段冗余:提高查询性能
  4. 软删除机制:通过status字段实现

后端开发实践

统一响应格式

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result<T> {
    private Integer code;
    private String message;
    private T data;
    
    public static <T> Result<T> success(T data) {
        return new Result<>(200, "操作成功", data);
    }
    
    public static <T> Result<T> error(String message) {
        return new Result<>(500, message, null);
    }
}

控制器层设计

@RestController
@RequestMapping("/api/videos")
@Tag(name = "视频管理", description = "视频相关API")
public class VideosController {
    
    @Autowired
    private VideosService videosService;
    
    @PostMapping
    @Operation(summary = "上传视频")
    public Result<Videos> uploadVideo(@RequestBody Videos video) {
        try {
            Videos savedVideo = videosService.save(video);
            return Result.success(savedVideo);
        } catch (Exception e) {
            return Result.error("视频上传失败:" + e.getMessage());
        }
    }
    
    @GetMapping("/page")
    @Operation(summary = "分页查询视频")
    public Result<IPage<Videos>> getVideosPage(
            @RequestParam(defaultValue = "1") Integer current,
            @RequestParam(defaultValue = "10") Integer size,
            @RequestParam(required = false) String keyword,
            @RequestParam(required = false) Long categoryId) {
        // 分页查询逻辑
        return Result.success(page);
    }
}

服务层实现

@Service
public class VideosServiceImpl extends ServiceImpl<VideosMapper, Videos> implements VideosService {
    
    @Autowired
    private UserLikesService userLikesService;
    
    @Override
    @Transactional
    public boolean likeVideo(Long videoId, Long userId) {
        // 检查是否已点赞
        QueryWrapper<UserLikes> wrapper = new QueryWrapper<>();
        wrapper.eq("user_id", userId).eq("video_id", videoId);
        UserLikes existingLike = userLikesService.getOne(wrapper);
        
        if (existingLike != null) {
            // 取消点赞
            userLikesService.removeById(existingLike.getId());
            this.decrementLikesCount(videoId);
            return false;
        } else {
            // 添加点赞
            UserLikes userLike = new UserLikes();
            userLike.setUserId(userId);
            userLike.setVideoId(videoId);
            userLikesService.save(userLike);
            this.incrementLikesCount(videoId);
            return true;
        }
    }
}

API接口总览

项目共实现了66个API接口,涵盖7个核心模块:

  • 视频管理:12个接口(上传、查询、搜索、点赞、收藏等)
  • 用户管理:14个接口(注册、登录、资料管理、关注等)
  • 分类管理:7个接口(增删改查、状态管理等)
  • 评论管理:7个接口(发布评论、回复、点赞等)
  • 通知管理:8个接口(消息推送、已读状态等)
  • 后台管理:15个接口(用户管理、内容审核、统计等)
  • 系统管理:3个接口(健康检查、版本信息等)

前端开发实践

现代化UI设计

<!-- 主页面布局 -->
<div class="container">
    <!-- 导航栏 -->
    <nav class="navbar">
        <div class="nav-left">
            <img src="/images/logo.png" alt="HBC Video" class="logo">
        </div>
        <div class="nav-center">
            <div class="search-box">
                <input type="text" placeholder="搜索视频..." id="searchInput">
                <button class="search-btn" onclick="searchVideos()">
                    <i class="layui-icon layui-icon-search"></i>
                </button>
            </div>
        </div>
        <div class="nav-right">
            <div class="user-actions" id="userActions"></div>
        </div>
    </nav>
    
    <!-- 内容区域 -->
    <main class="main-content">
        <div class="category-tabs" id="categoryTabs"></div>
        <div class="video-grid" id="videoGrid"></div>
        <div class="pagination" id="pagination"></div>
    </main>
</div>

JavaScript模块化设计

// 公共API封装
const VideoAPI = {
    // 获取视频列表
    getList: async (params) => {
        return await request('/api/videos/page', 'GET', params);
    },
    
    // 点赞视频
    like: async (videoId) => {
        return await request(`/api/videos/${videoId}/like`, 'POST');
    },
    
    // 收藏视频
    favorite: async (videoId) => {
        return await request(`/api/videos/${videoId}/favorite`, 'POST');
    }
};

// 页面状态管理
const PageState = {
    currentPage: 1,
    pageSize: 12,
    currentCategory: null,
    searchKeyword: '',
    
    // 重置状态
    reset() {
        this.currentPage = 1;
        this.currentCategory = null;
        this.searchKeyword = '';
    }
};

响应式设计

/* 响应式网格布局 */
.video-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
    gap: 20px;
    padding: 20px;
}

/* 移动端适配 */
@media (max-width: 768px) {
    .video-grid {
        grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
        gap: 15px;
        padding: 15px;
    }
    
    .navbar {
        flex-direction: column;
        padding: 10px;
    }
    
    .search-box {
        width: 100%;
        margin: 10px 0;
    }
}

项目亮点

1. 现代化技术栈

  • 采用Spring Boot 3.2.7 + Java 17,享受最新特性
  • 使用MyBatis Plus简化数据操作
  • 集成Knife4j提供美观的API文档

2. 完整的业务功能

  • 实现了短视频平台的所有核心功能
  • 支持用户互动、内容管理、消息通知
  • 提供完善的后台管理系统

3. 优秀的代码质量

  • 分层架构清晰,职责分明
  • 统一的异常处理和响应格式
  • 完善的参数验证和错误处理

4. 现代化前端设计

  • 响应式布局,适配多端设备
  • 模块化JavaScript代码
  • 优秀的用户体验设计

5. 可扩展性强

  • 松耦合的系统设计
  • 易于添加新功能模块
  • 支持分布式部署

部署与运行

  1. 环境要求
  • JDK 17+
  • MySQL 8.0+
  • Maven 3.6+
  1. 数据库配置
-- 创建数据库
CREATE DATABASE hbc_video CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 导入数据表
mysql -u root -p hbc_video < short_video_platform.sql
  1. 修改配置
# application.yml
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/hbc_video
    username: your_username
    password: your_password
  1. 启动项目
mvn spring-boot:run
  1. 访问系统
  • 前台首页:http://localhost:8080
  • API文档:http://localhost:8080/doc.html

运行效果

请添加图片描述
请添加图片描述
在这里插入图片描述
在这里插入图片描述

总结

HBC Video项目展示了如何使用现代化技术栈构建一个功能完整的短视频平台。通过本项目的学习,您可以掌握:

  1. Spring Boot 3.2.7的核心特性和最佳实践
  2. MyBatis Plus的高级使用技巧
  3. 前后端分离的开发模式
  4. 响应式Web设计的实现方法
  5. RESTful API的设计原则

该项目不仅适合作为学习案例,也可以作为实际项目的基础框架进行扩展。希望这个项目能够帮助更多的开发者理解和掌握现代化Web开发技术。


关键词: Spring Boot 3.2.7, Java 17, MyBatis Plus, 短视频平台, 全栈开发, LayUI, 响应式设计, RESTful API

标签: #SpringBoot #Java #短视频 #全栈开发 #MyBatisPlus #LayUI