(免费分享)基于springboot博客系统

news2025/1/11 18:42:38

源码获取:关注文末gongzhonghao,输入015领取下载链接

开发工具:IDEA,数据库mysql

技术:springboot+mybatis-plus+redis

系统分用户前台和管理后台

前台截图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
后台截图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

package com.puboot.module.admin.controller;

import cn.hutool.core.collection.CollUtil;
import com.puboot.common.util.CoreConst;
import com.puboot.common.util.ResultUtil;
import com.puboot.module.admin.model.BizArticle;
import com.puboot.module.admin.model.BizCategory;
import com.puboot.module.admin.service.BizArticleService;
import com.puboot.module.admin.service.BizCategoryService;
import com.puboot.module.admin.vo.base.ResponseVo;
import lombok.AllArgsConstructor;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.thymeleaf.util.ListUtils;

import java.util.Date;
import java.util.List;

/**
 * 后台类目管理
 */
@Controller
@RequestMapping("category")
@AllArgsConstructor
public class CategoryController {

    private final BizCategoryService categoryService;
    private final BizArticleService articleService;

    @PostMapping("list")
    @ResponseBody
    public List<BizCategory> loadCategory(boolean isFistLevel) {
        BizCategory bizCategory = new BizCategory();
        bizCategory.setStatus(CoreConst.STATUS_VALID);
        if (isFistLevel) {
            bizCategory.setPid(CoreConst.TOP_MENU_ID);
        }
        return categoryService.selectCategories(bizCategory);
    }

    @GetMapping("/add")
    public String add() {
        return CoreConst.ADMIN_PREFIX + "category/form";
    }

    @PostMapping("/add")
    @ResponseBody
    @CacheEvict(value = "category", allEntries = true)
    public ResponseVo add(BizCategory bizCategory) {
        if (!CoreConst.TOP_MENU_ID.equals(bizCategory.getPid())) {
            List<BizArticle> bizArticles = articleService.selectByCategoryId(bizCategory.getPid());
            if (!ListUtils.isEmpty(bizArticles)) {
                return ResultUtil.error("添加失败,父级分类下存在文章");
            }
        }
        Date date = new Date();
        bizCategory.setCreateTime(date);
        bizCategory.setUpdateTime(date);
        bizCategory.setStatus(CoreConst.STATUS_VALID);
        boolean i = categoryService.save(bizCategory);
        if (i) {
            return ResultUtil.success("新增分类成功");
        } else {
            return ResultUtil.error("新增分类失败");
        }
    }

    @GetMapping("/edit")
    public String edit(Model model, Integer id) {
        BizCategory bizCategory = categoryService.selectById(id);
        model.addAttribute("category", bizCategory);
        return CoreConst.ADMIN_PREFIX + "category/form";
    }

    @PostMapping("/edit")
    @ResponseBody
    @CacheEvict(value = "category", allEntries = true)
    public ResponseVo edit(BizCategory bizCategory) {
        bizCategory.setUpdateTime(new Date());
        boolean i = categoryService.updateById(bizCategory);
        if (i) {
            return ResultUtil.success("编辑分类成功");
        } else {
            return ResultUtil.error("编辑分类失败");
        }
    }

    @PostMapping("/delete")
    @ResponseBody
    public ResponseVo delete(Integer id) {
        if (CollUtil.isNotEmpty(categoryService.selectByPid(id))) {
            return ResultUtil.error("该分类下存在子分类!");
        }
        return deleteBatch(new Integer[]{id});
    }

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

}

package com.puboot.module.admin.controller;

import com.puboot.module.admin.service.BizCategoryService;
import com.puboot.module.admin.service.SysConfigService;
import lombok.AllArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**

  • 统一错误跳转页面,如403,404,500

*/
@Controller
@RequestMapping(“/error”)
@AllArgsConstructor
public class ErrorController {

private final SysConfigService sysConfigService;
private final BizCategoryService bizCategoryService;

/**
 * shiro无权限时进入
 *
 * @param request
 * @param response
 * @param model
 * @return
 */
@RequestMapping("/403")
public String noPermission(HttpServletRequest request, HttpServletResponse response, Model model) {
    response.setStatus(HttpStatus.FORBIDDEN.value());
    return "error/403";
}

@RequestMapping("/404")
public String notFund(HttpServletRequest request, HttpServletResponse response, Model model) {
    return "error/404";
}

@RequestMapping("/500")
public String sysError(HttpServletRequest request, HttpServletResponse response, Model model) {
    return "error/500";
}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/21343.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

思泰克在创业板过会:拟募资4亿元,赛富投资、传音控股等为股东

11月18日&#xff0c;深圳证券交易所创业板披露的信息显示&#xff0c;厦门思泰克智能科技股份有限公司&#xff08;下称“思泰克”&#xff09;获得上市委会议通过。据贝多财经了解&#xff0c;思泰克的招股书于2022年5月5日获得创业板受理。 本次冲刺创业板上市&#xff0c;思…

西北工业大学算法理论考试复习

&#x1f600;大家好&#xff0c;我是白晨&#xff0c;一个不是很能熬夜&#x1f62b;&#xff0c;但是也想日更的人✈。如果喜欢这篇文章&#xff0c;点个赞&#x1f44d;&#xff0c;关注一下&#x1f440;白晨吧&#xff01;你的支持就是我最大的动力&#xff01;&#x1f4…

阿里云免费SSL证书过期替换

阿里云上有免费的SSL证书&#xff0c;但是好像一个账号全部免费的额度只有20张&#xff0c;一张可以用1年&#xff0c;意思是如果20年后你还需要SSL证书的话&#xff0c;那么你可能就得买了。 我的SSL证书过期了&#xff0c;网站能访问&#xff0c;但是浏览器总是说站点不安全&…

【蓝桥杯冲击国赛计划第7天】模拟和打表 {题目:算式问题、求值、既约分数、天干地支}

文章目录1. 模拟和打表1.1 定义2. 实例「算式问题」题目描述运行限制2.1 简单分析2.2 检查函数2.3 三重化二重3. 实例「求值」题目描述运行限制3.1 简单分析3.2 主函数4. 实例「既约分数」题目描述运行限制4.1 简单分析4.2 辗转相除法2.3 主函数5. 实例「天干地支」题目描述输入…

同花顺_代码解析_技术指标_T、U

本文通过对同花顺中现成代码进行解析&#xff0c;用以了解同花顺相关策略设计的思想 目录 TBR TRIX TRIXFS TWR UDL UOS TBR 新三价率 新三价率:100*上涨家数/(上涨家数下跌家数) MATBR1:TBR的M1日异同移动平均 MATBR2:TBR的M2日异同移动平均 1.指数仍处于下跌状态&a…

Java数据结构 | PriorityQueue详解

目录 一 、PriorityQueue 二、PriorityQueue常用方法介绍 三、 PriorityQueue源码剖析 四&#xff1a;应用&#xff1a;Top-K问题 一 、PriorityQueue 常用接口介绍 上文中我们介绍了优先级队列的模拟实现&#xff0c; Java集合框架中提供了PriorityQueue和PriorityBlocki…

2021 XV6 4:traps

目录 1.RISC-V assenbly 2.Backtrace 3.Alarm 1.RISC-V assenbly 第一个任务是阅读理解&#xff0c;一共有6个问题。 1.Which registers contain arguments to functions? For example, which register holds 13 in mains call to printf? 具体来说就是a0&#xff0c;a1几个…

Docker入门

目录 Docker的作用 Docker的核心概念 Docker安装 镜像命令 镜像下载 查看镜像 搜索镜像 删除镜像 容器命令 创建容器 列出容器 新建并启动容器(最常使用) 守护态运行 启动容器 终止容器 重启容器 进入容器 attach命令 exec命令&#xff08;最常使用&#xff09; 退出容器…

【JavaEE】一文掌握 Ajax

&#x1f431;‍&#x1f3cd;目录1. AJAX 简介2. 伪造Ajax演示3. jQuery.ajax3.1 简单测试&#xff0c;使用最原始的HttpServletResponse处理3.2 使用ajax动态构建前端表格3.3 登录提示效果小demo4. 练习小demo&#xff0c;实现百度搜索框的动态内容提示5. 总结&#xff1a;1.…

纸牌游戏洗牌发牌排序算法设计

纸牌游戏洗牌发牌排序算法设计 本文提供纸牌游戏设计制作的基础部分&#xff0c;即洗牌&#xff0c;发牌&#xff0c;牌张排序排列显示的算法。 以及游戏开始时间使用时间的显示。我是用简单的C语言编译器MySpringC在安卓手机上编写的。此是游戏的框架&#xff0c;供游戏设计者…

计算机网络4小时速成:网络层,虚电路和数据包服务,ipv4,ABC类地址,地址解析协议ARP,子网掩码,路由选择协议,路由器

计算机网络4小时速成&#xff1a;网络层&#xff0c;虚电路和数据包服务&#xff0c;ipv4,ABC类地址&#xff0c;地址解析协议ARP&#xff0c;子网掩码&#xff0c;路由选择协议&#xff0c;路由器 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;…

关于瑞萨R7 的CANFD切换为经典CAN

首先,R7的CANFD是兼容CAN通讯的&#xff0c;在R7芯片他们公用相同的寄存器&#xff0c;至于发出来的帧是CANFD还是CAN取决于协议的不同。 CANFD是可变速率数据段为可变长度&#xff0c;扩展到64Byte&#xff0c;仲裁段和数据段的速率不相同。CANFD新增了FDF,BRS,ESI。FDF表示是…

牛客_小白月赛_61

传送门 A 如果不是特意防止溢出了&#xff0c;那么需要用long,否则会一直卡 很普通的写法,超了就 1, 最后补上一个 1就行 (所以, 这题我wa了8次, 卡了半个小时,就是因为没开 long ! ! !) package com.csh.A; /*** author :Changersh* date : 2022/11/18*/import java.io.*; i…

day02 springmvc

day02 springmvc 第一章 RESTFul风格交互方式 第一节 RESTFul概述 1. REST的概念 REST&#xff1a;Representational State Transfer&#xff0c;表现层资源状态转移。 定位&#xff1a;互联网软件架构风格倡导者&#xff1a;Roy Thomas Fielding文献&#xff1a;Roy Thom…

Android源码学习---init

init&#xff0c;是linux系统中用户空间的第一个进程&#xff0c;也是Android系统中用户空间的第一个进程。 位于/system/core/init目录下。 分析init int main(int argc, char **argv) { //设置子进程退出的信号处理函数 sigchld_handler act.sa_handler sigchld_handler;…

【博学谷学习记录】超强总结,用心分享丨人工智能 Python面向对象 学习总结之Python与Java的区别

目录前言简述面向对象类对象特性前言 经过学习&#xff0c;对Python面向对象部分有了一定的了解。 总结记录&#xff1a;面向对象上Python与Java的部分区别 简述 从类、对象、特性三个层面来简述其部分区别 面向对象 类 PythonJava定义class ClassName(object):passpubl…

2000-2020年各省固定资本存量数据

2000-2020年各省资本存量数据 1&#xff1a;来源&#xff1a;统计NJ、各省统计NJ 2、时间&#xff1a;2000-2020年 3、包括&#xff1a;30个省 4、数据说明&#xff1a;含原始数据和计算过程及最终结果 4、指标说明&#xff1a; 参考文献&#xff1a; 单豪杰&#xff08;…

【微服务架构组件之注册中心】注册中心选型-我只选nacos

注册中心的产生是基于用来解耦服务提供者(Provider)与消费者&#xff08;Consumer&#xff09;的关系&#xff0c;分布式设计架构下&#xff0c;众多的服务提供者的数量并不是动态不变的&#xff0c;在传统的静态LB的方案中&#xff0c;无法很好感知这种变化&#xff1b; 在分…

[附源码]java毕业设计网上宠物商店

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

进度条——不仅仅是语言层面上的小程序

文章目录\r和\n进度条完整代码\r和\n 在老式键盘上&#xff0c;回车键是这样的形状 但是该键的功能它不仅仅是回车&#xff0c;而是回车换行&#xff01; 这里需要明白两个概念&#xff1a; 回车&#xff1a;光标移动到当前行的行首 换行&#xff1a;光标移动到当前位置的…