基于SpringBoot开发的知识库管理系统的设计与实现

Posted 编程指南针

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于SpringBoot开发的知识库管理系统的设计与实现相关的知识,希望对你有一定的参考价值。

作者主页:编程指南针

作者简介:Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师

主要内容:Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助

收藏点赞不迷路  关注作者有好处

文末获取源码 

项目编号:

一,项目简介

随着科学技术的迅速发展。软件开发领域诞生的新技术层出不穷。随着这些技术充满着各类软件,漏洞,如何使用,成为了需要解决的必须问题。所以,技术资源共享论坛旨在帮助人们解决各种各样的技术难题,学习层出不穷的科学技术,或者记录下自己学习新鲜技术的过程中所遇到的一些问题,以及是如何解决这些问题的。

在知识一些整理中,遇到了一些很多问题。我们可以以手抄报的形式来记录也可以发表到网络中,来分享自己的所学到的内容,可以上产各种类型的文件,获取悬赏分。悬赏分可以用来下载别人的资源,实现资源的交换。我们还可以发布自己的问题,付出自己的悬赏币,得到别人的指导,当然,回答别人的各个问题,也是一种获取悬赏币的手段。我们可以编辑我们所上传的所有资源,同时可以在全站搜索,检索出所有你想要的文件或者博客。分类和标签,将帮助你跟容易找到你所感兴趣的领域,并能够帮助你找到你所想了解的问题的答案。

每个用户在这个资源库平台当中,都可以找到自己的想要的一些答案和软件。如果你是一个程序员,你可以当博主,同时当你遇到编程上的一些问题的时候,也可以使用网站来寻找你想要获得的答案。作为一个学生,可以通过网站搜索,搜索你想要得到的问题的答案,或者是从资源中心下载你所中意的资源。

二,环境介绍

语言环境:Java:  jdk1.8

数据库:mysql: mysql5.7

应用服务器:Tomcat:  tomcat8.5.31

开发工具:IDEA或eclipse

开发技术:springBoot+mybatis+bootstrap+jquery

三,系统展示

用户首页

留言板

 

后台管理员登录 

后台首页 

 发布文章

 

文章列表

分类管理

 

 标签管理

 

网站基础信息管理

 评论管理

 权限管理

 

四,核心代码展示

package com.puboot.module.admin.controller;

import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.puboot.common.util.CoreConst;
import com.puboot.common.util.Pagination;
import com.puboot.common.util.PushArticleUtil;
import com.puboot.common.util.ResultUtil;
import com.puboot.enums.SysConfigKey;
import com.puboot.module.admin.model.BizArticle;
import com.puboot.module.admin.model.BizCategory;
import com.puboot.module.admin.model.BizTags;
import com.puboot.module.admin.model.User;
import com.puboot.module.admin.service.*;
import com.puboot.module.admin.vo.ArticleConditionVo;
import com.puboot.module.admin.vo.BaiduPushResVo;
import com.puboot.module.admin.vo.base.PageResultVo;
import com.puboot.module.admin.vo.base.ResponseVo;
import lombok.AllArgsConstructor;
import org.apache.shiro.SecurityUtils;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;


@Controller
@RequestMapping("article")
@AllArgsConstructor
public class ArticleController 

    private final BizArticleService articleService;
    private final BizArticleTagsService articleTagsService;
    private final BizCategoryService categoryService;
    private final BizTagsService tagsService;
    private final SysConfigService configService;

    @PostMapping("list")
    @ResponseBody
    public PageResultVo loadArticle(ArticleConditionVo articleConditionVo, Integer pageNumber, Integer pageSize) 
        articleConditionVo.setSliderFlag(true);
        IPage<BizArticle> page = new Pagination<>(pageNumber, pageSize);
        List<BizArticle> articleList = articleService.findByCondition(page, articleConditionVo);
        return ResultUtil.table(articleList, page.getTotal());
    

    /*文章*/
    @GetMapping("/add")
    public String addArticle(Model model) 
        BizCategory bizCategory = new BizCategory();
        bizCategory.setStatus(CoreConst.STATUS_VALID);
        List<BizCategory> bizCategories = categoryService.selectCategories(bizCategory);
        List<BizTags> tags = tagsService.list();
        model.addAttribute("categories", bizCategories);
        model.addAttribute("tags", tags);
        BizArticle bizArticle = new BizArticle().setTags(new ArrayList<>()).setOriginal(1).setSlider(0).setTop(0).setRecommended(0).setComment(1);
        model.addAttribute("article", bizArticle);
        return CoreConst.ADMIN_PREFIX + "article/publish";
    

    @PostMapping("/add")
    @ResponseBody
    @Transactional
    @CacheEvict(value = "article", allEntries = true)
    public ResponseVo add(BizArticle bizArticle, Integer[] tag) 
        try 
            User user = (User) SecurityUtils.getSubject().getPrincipal();
            bizArticle.setUserId(user.getUserId());
            bizArticle.setAuthor(user.getNickname());
            BizArticle article = articleService.insertArticle(bizArticle);
            articleTagsService.insertList(tag, article.getId());
            return ResultUtil.success("保存文章成功");
         catch (Exception e) 
            return ResultUtil.error("保存文章失败");
        
    

    @GetMapping("/edit")
    public String edit(Model model, Integer id) 
        BizArticle bizArticle = articleService.selectById(id);
        model.addAttribute("article", bizArticle);
        BizCategory bizCategory = new BizCategory();
        bizCategory.setStatus(CoreConst.STATUS_VALID);
        List<BizCategory> bizCategories = categoryService.selectCategories(bizCategory);
        model.addAttribute("categories", bizCategories);
        List<BizTags> sysTags = tagsService.list();
        /*方便前端处理回显*/
        List<BizTags> aTags = new ArrayList<>();
        List<BizTags> sTags = new ArrayList<>();
        boolean flag;
        for (BizTags sysTag : sysTags) 
            flag = false;
            for (BizTags articleTag : bizArticle.getTags()) 
                if (articleTag.getId().equals(sysTag.getId())) 
                    BizTags tempTags = new BizTags();
                    tempTags.setId(sysTag.getId());
                    tempTags.setName(sysTag.getName());
                    aTags.add(tempTags);
                    sTags.add(tempTags);
                    flag = true;
                    break;
                
            
            if (!flag) 
                sTags.add(sysTag);
            
        
        bizArticle.setTags(aTags);
        model.addAttribute("tags", sTags);
        return CoreConst.ADMIN_PREFIX + "article/publish";
    

    @PostMapping("/edit")
    @ResponseBody
    @CacheEvict(value = "article", allEntries = true)
    public ResponseVo edit(BizArticle article, Integer[] tag) 
        articleService.updateById(article);
        articleTagsService.removeByArticleId(article.getId());
        articleTagsService.insertList(tag, article.getId());
        return ResultUtil.success("编辑文章成功");
    

    @PostMapping("/delete")
    @ResponseBody
    public ResponseVo delete(Integer id) 
        return deleteBatch(new Integer[]id);
    

    @PostMapping("/batch/delete")
    @ResponseBody
    public ResponseVo deleteBatch(@RequestParam("ids[]") Integer[] ids) 
        int i = articleService.deleteBatch(ids);
        if (i > 0) 
            return ResultUtil.success("删除文章成功");
         else 
            return ResultUtil.error("删除文章失败");
        
    

    @PostMapping("/batch/push")
    @ResponseBody
    public ResponseVo pushBatch(@RequestParam("urls[]") String[] urls) 
        try 
            String url = configService.selectAll().get(SysConfigKey.BAIDU_PUSH_URL.getValue());
            BaiduPushResVo baiduPushResVo = JSON.parseObject(PushArticleUtil.postBaidu(url, urls), BaiduPushResVo.class);
            if (baiduPushResVo.getNotSameSite() == null && baiduPushResVo.getNotValid() == null) 
                return ResultUtil.success("推送文章成功");
             else 
                return ResultUtil.error("推送文章失败", baiduPushResVo);
            
         catch (Exception e) 
            return ResultUtil.error("推送文章失败,请检查百度推送接口!");
        

    

 

package com.puboot.module.admin.service.impl;

import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.puboot.common.util.CoreConst;
import com.puboot.common.util.Pagination;
import com.puboot.module.admin.mapper.BizArticleMapper;
import com.puboot.module.admin.model.BizArticle;
import com.puboot.module.admin.service.BizArticleService;
import com.puboot.module.admin.vo.ArticleConditionVo;
import lombok.AllArgsConstructor;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;

import java.util.*;

@Service
@AllArgsConstructor
public class BizArticleServiceImpl extends ServiceImpl<BizArticleMapper, BizArticle> implements BizArticleService 

    private final BizArticleMapper bizArticleMapper;

    @Override
    public List<BizArticle> findByCondition(IPage<BizArticle> page, ArticleConditionVo vo) 
        List<BizArticle> list = bizArticleMapper.findByCondition(page, vo);
        if (CollUtil.isNotEmpty(list)) 
            List<Integer> ids = new ArrayList<>();
            for (BizArticle bizArticle : list) 
                ids.add(bizArticle.getId());
            
            List<BizArticle> listTag = bizArticleMapper.listTagsByArticleId(ids);
            // listTag, 重新组装数据为id: Article
            Map<Integer, BizArticle> tagMap = new LinkedHashMap<>(listTag.size());
            for (BizArticle bizArticle : listTag) 
                tagMap.put(bizArticle.getId(), bizArticle);
            

            for (BizArticle bizArticle : list) 
                BizArticle tagArticle = tagMap.get(bizArticle.getId());
                if (Objects.nonNull(tagArticle)) 
                    bizArticle.setTags(tagArticle.getTags());
                
            
        
        return list;
    

    @Override
    @Cacheable(value = "article", key = "'slider'")
    public List<BizArticle> sliderList() 
        ArticleConditionVo vo = new ArticleConditionVo();
        vo.setSlider(true);
        vo.setStatus(CoreConst.STATUS_VALID);
        return this.findByCondition(null, vo);
    

    @Override
    @Cacheable(value = "article", key = "'recommended'")
    public List<BizArticle> recommendedList(int pageSize) 
        ArticleConditionVo vo = new ArticleConditionVo();
        vo.setRecommended(true);
        vo.setStatus(CoreConst.STATUS_VALID);
        vo.setPageSize(pageSize);
        IPage<BizArticle> page = new Pagination<>(vo.getPageNumber(), vo.getPageSize());
        return this.findByCondition(page, vo);
    

    @Override
    @Cacheable(value = "article", key = "'recent'")
    public List<BizArticle> recentList(int pageSize) 
        ArticleConditionVo vo = new ArticleConditionVo();
        vo.setPageSize(pageSize);
        vo.setStatus(CoreConst.STATUS_VALID);
        vo.setRecentFlag(true);
        IPage<BizArticle> page = new Pagination<>(vo.getPageNumber(), vo.getPageSize());
        return this.findByCondition(page, vo);
    

    @Override
    @Cacheable(value = "article", key = "'random'")
    public List<BizArticle> randomList(int pageSize) 
        ArticleConditionVo vo = new ArticleConditionVo();
        vo.setRandom(true);
        vo.setStatus(CoreConst.STATUS_VALID);
        vo.setPageSize(pageSize);
        IPage<BizArticle> page = new Pagination<>(vo.getPageNumber(), vo.getPageSize());
        return this.findByCondition(page, vo);
    

    @Override
    @Cacheable(value = "article", key = "'hot'")
    public List<BizArticle> hotList(int pageSize) 
        IPage<BizArticle> page = new Pagination<>(1, pageSize);
        return bizArticleMapper.hotList(page);
    

    @Override
    @Cacheable(value = "article", key = "#id")
    public BizArticle selectById(Integer id) 
        return bizArticleMapper.getById(id);
    

    @Override
    @CacheEvict(value = "article", allEntries = true)
    public BizArticle insertArticle(BizArticle bizArticle) 
        Date date = new Date();
        bizArticle.setCreateTime(date);
        bizArticle.setUpdateTime(date);
        bizArticleMapper.insert(bizArticle);
        return bizArticle;
    

    @Override
    @CacheEvict(value = "article", allEntries = true)
    public int deleteBatch(Integer[] ids) 
        return bizArticleMapper.deleteBatch(ids);
    

    @Override
    public List<BizArticle> selectByCategoryId(Integer categoryId) 
        return bizArticleMapper.selectList(Wrappers.<BizArticle>lambdaQuery().eq(BizArticle::getCategoryId, categoryId));
    


五,项目总结

本项目是面对所有毕设需要的同学,网站的兼容性高,稳定性好,在各类电脑上都能够稳定运行,也适应多数主流浏览器

以上是关于基于SpringBoot开发的知识库管理系统的设计与实现的主要内容,如果未能解决你的问题,请参考以下文章

基于Springboot实现专业认证材料管理系统

高校课程知识库系统|基于Springboot+vue实现高校课程知识库在线学校平台

高校课程知识库系统|基于Springboot+vue实现高校课程知识库在线学校平台

基于Springboot+SSM框架旅游系统项目开发与设计(附源码资料)-毕业设计

基于springboot仿天猫商城系统开发与设计.rar(项目源码)

基于springboot健身房管理系统的设计与实现(项目源码)