Java项目:83 springboot知识管理系统

本文介绍了使用SpringBoot、MyBatis、Vue等技术构建的一个知识管理系统,包括管理员和用户功能,如用户管理、文章分类管理、资料下载等,并提供了基础的CRUD操作和文件上传功能。
摘要由CSDN通过智能技术生成
作者主页:源码空间codegym

简介:Java领域优质创作者、Java项目、学习资料、技术互助

文中获取源码

项目介绍

本知识管理系统有管理员和用户两个角色。

管理员功能有个人中心,用户管理,文章分类管理,文章信息管理,资料分类管理,资料下载管理,问答管理,论坛交流,留言板管理,系统管理等。

用户功能有个人中心,文章信息管理,资料下载管理,问答管理,我的收藏管理。

环境要求

1.运行环境:最好是java jdk1.8,我们在这个平台上运行的。其他版本理论上也可以。

2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;

3.tomcat环境:Tomcat7.x,8.X,9.x版本均可

4.硬件环境:windows7/8/10 4G内存以上;或者Mac OS;

5.是否Maven项目:是;查看源码目录中是否包含pom.xml;若包含,则为maven项目,否则为非maven.项目

6.数据库:MySql5.7/8.0等版本均可;

技术栈

运行环境:jdk8 + tomcat9 + mysql5.7 + windows10

服务端技术:SpringBoot + MyBatis + Vue + Bootstrap + jQuery

使用说明

1.使用Navicati或者其它工具,在mysql中创建对应sq文件名称的数据库,并导入项目的sql文件;

2.使用IDEA/Eclipse/MyEclipse导入项目,修改配置,运行项目;

3.将项目中config-propertiesi配置文件中的数据库配置改为自己的配置,然后运行;

运行指导

idea导入源码空间站顶目教程说明(Vindows版)-ssm篇:

http://mtw.so/5MHvZq

源码地址:http://codegym.top

运行截图

文档截图

img

img

项目截图

1

2

3

4

5

6

7

8

package com.server.api.common;

import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.server.api.common.constants.ResultConstant;
import com.server.api.common.util.UploadUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.lang.reflect.Method;
import java.util.List;
import java.util.Map;

/**
 * @Description: 控制层接口的基类
 * @Author: wuming
 */
@Controller
@SuppressWarnings("all")
public abstract class BaseController<T extends IService, E extends BaseEntity> {

    @Autowired
    protected UploadUtil uploadUtil;

    @Value("${imgHost}")
    private String imgHost;

    protected T baseService;

    protected abstract void setBaseService(T sevice);


    /**
     * 根据实体类中条件进行全等查询
     *
     * @param params
     * @return mybatis-plus 分页对象
     * @throws Exception
     */
    @PostMapping(value = "/list/param")
    public ReturnMsg baseGetListPage(@RequestBody Map<String, Object> params) throws Exception {
        return pageByWrapper(params);
    }

    /**
     * 根据实体类中条件进行全等查询
     *
     * @param params
     * @return mybatis-plus 返回所有数据
     * @throws Exception
     */
    @PostMapping(value = "/list/all")
    public ReturnMsg baseGetListAll(@RequestBody Map<String, Object> params) throws Exception {
        QueryWrapper<E> wrapper = beforeGetListAll(params);
        return afterGetListAll(baseService.list());
    }

    /**
     * 根据id获取信息
     *
     * @param id
     * @return
     * @throws Exception
     */
    @GetMapping("/get/{id}")
    public ReturnMsg baseGetById(@PathVariable("id") Long id) throws Exception {
        beforeGetById(id);
        return afterGetById((E) baseService.getById(id));
    }

    /**
     * 保存或者修改信息方法
     *
     * @param entity 实体对象
     * @return 返回信息
     * @throws Exception
     */
    @PostMapping(value = "/save/update")
    public ReturnMsg baseSaveOrUpdate(@RequestBody E entity) throws Exception {
        beforeSaveOrUpdate(entity);
        boolean flag = baseService.saveOrUpdate(entity);
        if (ObjectUtil.isNotEmpty(entity.getId())) {
            return afterSaveOrUpdate(entity, flag, ResultConstant.UPDATE_DATA_FALL_MSG);
        } else {
            return afterSaveOrUpdate(entity, flag, ResultConstant.INSERT_DATA_FALL_MSG);
        }
    }

    /**
     * 据ID删除数据
     *
     * @param id 主键编号
     * @return 实体对象
     * @throws Exception
     */
    @GetMapping(value = "/remove/{id}")
    public ReturnMsg baseRemoveById(@PathVariable("id") Long id) throws Exception {
        beforeRemoveById(id);
        boolean flag = baseService.removeById(id);
        return afterRemoveById(flag, id);
    }

    /**
     * 根据ID集合进行删除
     *
     * @param idList 主键id的List集合
     * @return
     * @throws Exception
     */
    @PostMapping("/remove")
    public ReturnMsg baseRemoveByIds(@RequestBody List<Long> idList) throws Exception {
        beforeRemoveByIds(idList);
        boolean flag = baseService.removeByIds(idList);
        return afterRemoveByIds(flag, idList);
    }

    /**
     * 分页
     *
     * @param params
     * @return
     */
    protected ReturnMsg pageByWrapper(Map<String, Object> params) {
        QueryWrapper<E> wrapper = beforeGetListPage(params);
        if (StrUtil.isEmptyIfStr(params.get(ResultConstant.CURRENT))) {
            params.put(ResultConstant.CURRENT, ResultConstant.DEFAULT_CURRENT);
        }
        if (StrUtil.isEmptyIfStr(params.get(ResultConstant.PAGE_SIZE))) {
            params.put(ResultConstant.PAGE_SIZE, ResultConstant.DEFAULT_PAGE_SIZE);
        }
        Page<E> selectPageList = (Page<E>) baseService.page(new Page(
                Long.parseLong(params.get(ResultConstant.CURRENT).toString())
                , Long.parseLong(params.get(ResultConstant.PAGE_SIZE).toString())), wrapper);
        return afterGetListPage(selectPageList, params);
    }

    /**
     * 分页前对wrapper的处理
     *
     * @param params
     * @return
     */
    private QueryWrapper<E> beforeGetListPage(Map<String, Object> params) {
        return beforeGetListPage(params, null);
    }

    /**
     * 重载分页前对wrapper的处理
     *
     * @param params
     * @param sqlWrapper
     * @return
     */
    protected QueryWrapper<E> beforeGetListPage(Map<String, Object> params, QueryWrapper<E> sqlWrapper) {
        if (null == sqlWrapper) {
            sqlWrapper = new QueryWrapper<>();
        }
        return sqlWrapper;
    }

    /**
     * 分页处理完后的数据响应
     *
     * @param obj
     * @return
     */
    protected ReturnMsg afterGetListPage(Object obj, Map<String, Object> params) {
        return ReturnMsg.ok(obj);
    }

    /**
     * 查询所有数据前对wrapper的处理
     *
     * @param params
     * @return
     */
    protected QueryWrapper<E> beforeGetListAll(Map<String, Object> params) {
        return null;
    }

    /**
     * 查询所有数据后对wrapper的处理
     *
     * @param params
     * @return
     */
    protected ReturnMsg afterGetListAll(Object obj) {
        return ReturnMsg.ok(obj);
    }

    /**
     * 查看单个数据前操作
     *
     * @param id
     */
    protected void beforeGetById(Long id) {

    }

    /**
     * 查看单个数据后操作
     *
     * @param entity
     */
    protected ReturnMsg afterGetById(E entity) {
        return entity != null ? ReturnMsg.ok(entity)
                : ReturnMsg.error(ResultConstant.SELECT_DATA_FALL_MSG);
    }

    /**
     * 保存修改前的操作
     *
     * @param entity
     * @return
     */
    protected void beforeSaveOrUpdate(E entity) throws Exception {

    }

    /**
     * 保存修改后的操作
     *
     * @param entity
     * @return
     */
    protected ReturnMsg afterSaveOrUpdate(E entity, boolean flag, String msg) {
        return flag ? ReturnMsg.ok(entity)
                : ReturnMsg.error(msg);
    }

    /**
     * 单个删除前的操作
     *
     * @param entity
     * @return
     */
    protected void beforeRemoveById(Long id) {
    }

    /**
     * 单个删除后的操作
     *
     * @param entity
     * @return
     */
    protected ReturnMsg afterRemoveById(boolean flag, Long id) {
        return flag ? ReturnMsg.ok()
                : ReturnMsg.error(ResultConstant.DEFAULT_FAIL_MSG);
    }

    /**
     * 根据ID集合进行删除前操作
     *
     * @param entity
     * @return
     */
    protected void beforeRemoveByIds(List<Long> idList) {
    }

    /**
     * 根据ID集合进行删除后操作
     *
     * @param entity
     * @return
     */
    protected ReturnMsg afterRemoveByIds(boolean flag, List<Long> list) {
        return flag ? ReturnMsg.ok()
                : ReturnMsg.error(ResultConstant.DELETE_DATA_FALL_MSG);
    }

    /**
     * 单点图片文件上传
     *
     * @param filename 文件对象
     * @param id       修改的表的主键编号
     * @param realPath 保存的文件夹名称
     * @param clazz    实体类的class
     * @return
     * @throws IOException
     */
    public boolean baseUpLoad(MultipartFile filename, Long id, String realPath, Class<E> clazz) throws IOException {
        // 1.保存文件
        String uploadFileName = uploadUtil.Upload(filename, realPath);
        boolean flag = false;
        try {
            E e = clazz.newInstance();
            e.setId(id);
            E o = (E) baseService.getBaseMapper().selectById(id);
            Method[] methods = clazz.getMethods();
            for (Method method : methods) {
                if (method.getName().endsWith("Img") && method.getName().startsWith("set")) {
                    method.invoke(e, imgHost + uploadFileName);
                }
            }
            // 2.修改数据库,服务器访问图片路径
            flag = baseService.updateById(e);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return flag;
    }

}

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值