博客系统 | 零基础vs技术大神:谁的SpringBoot博客系统毕设更容易通过答辩?

33 阅读4分钟

💖💖作者:计算机毕业设计江挽 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学习实战项目 @TOC

博客系统介绍

本博客系统是一个基于SpringBoot框架开发的现代化内容管理平台,采用前后端分离的架构设计,前端运用Vue.js配合ElementUI组件库构建用户友好的交互界面,后端通过SpringBoot整合Spring、SpringMVC和MyBatis等成熟技术栈,实现稳定可靠的业务逻辑处理。系统以MySQL作为数据存储引擎,支持用户注册登录、个人信息管理、文章发布编辑、分类标签管理、内容举报处理、消息通知推送等核心功能模块。整个系统遵循B/S架构模式,用户可通过浏览器直接访问使用,无需安装额外客户端软件。系统界面简洁美观,操作流程清晰直观,既能满足普通用户的内容创作需求,也为管理员提供了完善的后台管理工具。通过合理的权限控制和数据验证机制,系统能够有效保障用户数据安全和内容质量,为用户打造一个安全、便捷、功能丰富的博客创作环境。

博客系统演示视频

演示视频

博客系统演示图片

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

博客系统代码展示

import org.apache.spark.sql.SparkSession;
import org.springframework.web.bind.annotation.*;
import org.springframework.beans.factory.annotation.Autowired;
import com.example.mapper.UserMapper;
import com.example.mapper.ArticleMapper;
import com.example.mapper.CategoryMapper;
import com.example.entity.User;
import com.example.entity.Article;
import com.example.entity.Category;
import java.util.List;
import java.util.Date;
@RestController
@RequestMapping("/api")
public class BlogController {
    @Autowired
    private UserMapper userMapper;
    @Autowired
    private ArticleMapper articleMapper;
    @Autowired
    private CategoryMapper categoryMapper;
    private SparkSession spark = SparkSession.builder().appName("BlogSystem").master("local[*]").getOrCreate();
    @PostMapping("/user/register")
    public Result registerUser(@RequestBody User user) {
        if (user.getUsername() == null || user.getUsername().trim().isEmpty()) {
            return Result.error("用户名不能为空");
        }
        if (user.getPassword() == null || user.getPassword().length() < 6) {
            return Result.error("密码长度不能少于6位");
        }
        User existUser = userMapper.findByUsername(user.getUsername());
        if (existUser != null) {
            return Result.error("用户名已存在");
        }
        user.setCreateTime(new Date());
        user.setStatus(1);
        user.setRole("user");
        String encodedPassword = BCrypt.hashpw(user.getPassword(), BCrypt.gensalt());
        user.setPassword(encodedPassword);
        int result = userMapper.insertUser(user);
        if (result > 0) {
            return Result.success("注册成功");
        } else {
            return Result.error("注册失败");
        }
    }
    @PostMapping("/user/login")
    public Result loginUser(@RequestBody User loginUser) {
        if (loginUser.getUsername() == null || loginUser.getUsername().trim().isEmpty()) {
            return Result.error("用户名不能为空");
        }
        if (loginUser.getPassword() == null || loginUser.getPassword().trim().isEmpty()) {
            return Result.error("密码不能为空");
        }
        User user = userMapper.findByUsername(loginUser.getUsername());
        if (user == null) {
            return Result.error("用户不存在");
        }
        if (user.getStatus() == 0) {
            return Result.error("账户已被禁用");
        }
        boolean passwordMatch = BCrypt.checkpw(loginUser.getPassword(), user.getPassword());
        if (!passwordMatch) {
            return Result.error("密码错误");
        }
        String token = JwtUtil.generateToken(user.getId(), user.getUsername());
        user.setLastLoginTime(new Date());
        userMapper.updateLastLoginTime(user.getId(), new Date());
        return Result.success("登录成功", token);
    }
    @PostMapping("/article/create")
    public Result createArticle(@RequestBody Article article, HttpServletRequest request) {
        String token = request.getHeader("Authorization");
        if (token == null || token.isEmpty()) {
            return Result.error("未登录");
        }
        Integer userId = JwtUtil.getUserIdFromToken(token);
        if (userId == null) {
            return Result.error("token无效");
        }
        if (article.getTitle() == null || article.getTitle().trim().isEmpty()) {
            return Result.error("文章标题不能为空");
        }
        if (article.getContent() == null || article.getContent().trim().isEmpty()) {
            return Result.error("文章内容不能为空");
        }
        if (article.getCategoryId() == null) {
            return Result.error("请选择文章分类");
        }
        Category category = categoryMapper.findById(article.getCategoryId());
        if (category == null) {
            return Result.error("分类不存在");
        }
        article.setAuthorId(userId);
        article.setCreateTime(new Date());
        article.setUpdateTime(new Date());
        article.setStatus(1);
        article.setViewCount(0);
        article.setLikeCount(0);
        int result = articleMapper.insertArticle(article);
        if (result > 0) {
            categoryMapper.updateArticleCount(article.getCategoryId());
            return Result.success("文章发布成功");
        } else {
            return Result.error("文章发布失败");
        }
    }
    @GetMapping("/article/list")
    public Result getArticleList(@RequestParam(defaultValue = "1") int page,
                                @RequestParam(defaultValue = "10") int size,
                                @RequestParam(required = false) Integer categoryId,
                                @RequestParam(required = false) String keyword) {
        int offset = (page - 1) * size;
        List<Article> articles;
        int total;
        if (categoryId != null && keyword != null && !keyword.trim().isEmpty()) {
            articles = articleMapper.findByCategoryAndKeyword(categoryId, keyword, offset, size);
            total = articleMapper.countByCategoryAndKeyword(categoryId, keyword);
        } else if (categoryId != null) {
            articles = articleMapper.findByCategory(categoryId, offset, size);
            total = articleMapper.countByCategory(categoryId);
        } else if (keyword != null && !keyword.trim().isEmpty()) {
            articles = articleMapper.findByKeyword(keyword, offset, size);
            total = articleMapper.countByKeyword(keyword);
        } else {
            articles = articleMapper.findAllPublished(offset, size);
            total = articleMapper.countAllPublished();
        }
        for (Article article : articles) {
            User author = userMapper.findById(article.getAuthorId());
            if (author != null) {
                article.setAuthorName(author.getUsername());
            }
            Category category = categoryMapper.findById(article.getCategoryId());
            if (category != null) {
                article.setCategoryName(category.getName());
            }
        }
        return Result.success("获取成功", articles, total);
    }
    @PostMapping("/category/create")
    public Result createCategory(@RequestBody Category category, HttpServletRequest request) {
        String token = request.getHeader("Authorization");
        if (token == null || token.isEmpty()) {
            return Result.error("未登录");
        }
        Integer userId = JwtUtil.getUserIdFromToken(token);
        if (userId == null) {
            return Result.error("token无效");
        }
        User user = userMapper.findById(userId);
        if (user == null || !"admin".equals(user.getRole())) {
            return Result.error("无权限操作");
        }
        if (category.getName() == null || category.getName().trim().isEmpty()) {
            return Result.error("分类名称不能为空");
        }
        Category existCategory = categoryMapper.findByName(category.getName().trim());
        if (existCategory != null) {
            return Result.error("分类名称已存在");
        }
        category.setName(category.getName().trim());
        category.setCreateTime(new Date());
        category.setArticleCount(0);
        category.setStatus(1);
        int result = categoryMapper.insertCategory(category);
        if (result > 0) {
            return Result.success("分类创建成功");
        } else {
            return Result.error("分类创建失败");
        }
    }
    @GetMapping("/category/list")
    public Result getCategoryList() {
        List<Category> categories = categoryMapper.findAllActive();
        for (Category category : categories) {
            int articleCount = articleMapper.countByCategory(category.getId());
            category.setArticleCount(articleCount);
        }
        return Result.success("获取成功", categories);
    }
}

博客系统文档展示

在这里插入图片描述

💖💖作者:计算机毕业设计江挽 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学习实战项目