基于 Spring Boot 博客系统开发(一)

基于 Spring Boot 博客系统开发(一)

本系统是简易的个人博客系统开发,为了更加熟练地掌握SprIng Boot 框架及相关技术的使用。🤓🤓🤓
基于 Spring Boot 博客系统开发(二)👈👈

本系统开发所需的环境及相关软件

操作系统:Windows
Java开发包:JDK 8
spring boot 版本:2.6.13
项目管理工具:Maven 3.8.0
项目开发工具:IntelliJ IDEA
数据库:MySQL
浏览器:谷歌浏览器

系统功能框架图

在这里插入图片描述

  1. 前端使用Spring Boot支持的模板引擎Thymeleaf+jQuery完成页面信息展示
  2. 后端使用Spring MVC+Spring+MyBatis Plus框架进行整合开发

静态资源首页效果预览

静态资源下载链接
在这里插入图片描述

项目结构

创建一个名称为blog_system01的Spring Boot项目,选择Web模块
在这里插入图片描述

数据库设计

文章详情表t_article
在这里插入图片描述
文章评论表t_comment
在这里插入图片描述
文章统计表t_statistic
在这里插入图片描述
用户信息表t_user
在这里插入图片描述
用户权限表authority
在这里插入图片描述
用户权限关联表t_user_authority
在这里插入图片描述

创建数据库并导入测试数据

创建一个名称为blog_system01的数据库,并选择该数据库,然后将本书资源中所提供的blog_system.sql文件导入到blog_system数据库中。
在这里插入图片描述

引入依赖

starters 快捷添加依赖
在这里插入图片描述
所需要的依赖

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.2</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.5.1</version></dependency><dependency><groupId>org.apache.velocity</groupId><artifactId>velocity-engine-core</artifactId><version>2.0</version></dependency><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.1.10</version></dependency>

编写配置文件

application.properties全局配置文件添加配置

# 应用服务 WEB 访问端口
server.port=8080# 数据源
spring.datasource.driver‐class‐name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/blog_system01
spring.datasource.username=root
spring.datasource.password=root# 显示SQL日志
mybatis‐plus.configuration.log‐impl=org.apache.ibatis.logging.stdout.StdOutImpl# mapper.xml 配置文件路径
mybatis‐plus.mapper‐locations=classpath:mapper/*.xml
# 配置XML映射文件中指定的实体类别名路径
mybatis-plus.type-aliases-package=cn.qvtu.web.domain#Thymeleaf 模板缓存、模板编码、模板样式、指定模板页面存放路径、指定模板页面名称的后缀
spring.thymeleaf.cache=false
spring.thymeleaf.encoding=utf-8
spring.thymeleaf.mode=HTML5
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html

添加分页拦截器

package cn.qvtu.web.config;import com.github.pagehelper.PageInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import java.util.Properties;@Configuration
public class MyBatisConfig {@Beanpublic PageInterceptor pageInterceptor(){PageInterceptor pageInterceptor = new PageInterceptor();Properties properties = new Properties();properties.setProperty("helperDialect", "mysql");pageInterceptor.setProperties(properties);return pageInterceptor;}
}

添加代码生成器

代码生成器代码文件需要修改数据库连接信息、生成目录、使用该类的主函数启动。
在这里插入图片描述

package cn.qvtu.web.config;import com.baomidou.mybatisplus.generator.FastAutoGenerator;import java.util.Arrays;
import java.util.Collections;
import java.util.List;/*** 代码生成器*/
public class MyBatisPlusCodeGenerator {public static void main(String[] args) {FastAutoGenerator.create("jdbc:mysql://localhost:3306/blog_system01", "root", "root")// 全局配置.globalConfig((scanner, builder) -> builder.author(scanner.apply("请输入作者名称?")).fileOverride().outputDir("E://"))
// 包配置.packageConfig((scanner, builder) -> builder.parent(scanner.apply("请输入包名?"))).packageConfig(builder-> builder.entity("domain"))
// 策略配置.strategyConfig((scanner, builder) -> builder.addInclude(getTables(scanner.apply("请输入表名,多个英文逗号分隔?所有输入 all"))).addTablePrefix("t_").controllerBuilder().enableRestStyle().enableHyphenStyle().entityBuilder().enableLombok().mapperBuilder().enableMapperAnnotation().build()).execute();}// 处理 all 情况protected static List<String> getTables(String tables) {return "all" .equals(tables) ? Collections.emptyList() : Arrays.asList(tables.split(","));}}

代码生成器生成基础文件放入项目

在这里插入图片描述

测试数据库的连接和分页

下面代码执行成功,返回sql日志和输出list对象信息,集合个数为3。🥳🥳🥳

@SpringBootTest
class BlogSystem01ApplicationTests {@Autowiredprivate IArticleService articleService;@Testvoid contextLoads() {PageHelper.startPage(1,3);List<Article> list = articleService.list();System.out.println(list);}}

前端资源引入

静态资源下载链接
在这里插入图片描述

配置404,500等错误页面

只需在template目录下创建error目录,然后将模板按错误码命名,发生404,500等错误时就会统一跳转到指定html页面。
在这里插入图片描述

前端模板结构

在这里插入图片描述

编写controller的页面跳转方法

编写完这些方法,通过http://127.0.0.1:8080/请求这些方法可以返回模板页面

@Controller
public class HomeController {@RequestMapping("/")public String home(){return "client/index";}@RequestMapping("/article")public String article(){return "client/article";}@GetMapping("/login")public String login(){return "client/login";}}

访问效果

在这里插入图片描述

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

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

相关文章

聊聊.NET Core处理全局异常有那些方法

简述 处理全局异常的方法有IExceptionFilter&#xff08;异常处理&#xff09;&#xff0c;使用中间件异常处理&#xff0c;使用框架自带异常中间件等。考点 考察对异常处理方式的熟悉程度和广度&#xff0c;以及对中间件、过滤器熟练程度。 下面分别具体介绍三种处理异常的…

Spring Cloud学习笔记(Feigh):简介,实战简单样例

这是本人学习的总结&#xff0c;主要学习资料如下 - 马士兵教育 1、Netflix Feign简介2、Open Feign的简单样例2.1、dependency2.2、代码样例 1、Netflix Feign简介 Netfilx Feign是用来帮助发送远程服务的&#xff0c;它让开发者觉得调用远程服务就像是调用本地方法一样&…

计算机系列之进程调度、死锁、存储管理、设备管理、文件管理

11、进程调度-死锁-存储管理-固定分页分段 1、进程调度 进程调度方式是指当有更高优先级的进程到来时如何分配CPU。分为可剥夺和不可剥夺两种&#xff0c;可剥夺指当有更高优先级进程到来时&#xff0c;强行将正在运行进程的CPU分配给高优先级进程&#xff1b;不可剥夺是指高…

分享一些常用的内外网文件传输工具

内外网隔离后的文件传输是网络安全领域中一个常见而又重要的问题。随着信息技术的快速发展&#xff0c;网络安全问题日益凸显&#xff0c;内外网隔离成为了许多企业和组织保护内部信息安全的重要手段。然而&#xff0c;内外网隔离后如何有效地进行文件传输&#xff0c;成为了摆…

专利视角下的量子竞赛:《2024全球专利格局白皮书》

2024年1月&#xff0c;欧洲量子产业联盟&#xff08;QuIC&#xff09;发布了题为《全球量子技术专利格局描述》的综合白皮书。 该文件以透明的视角展示了当今的知识产权格局&#xff0c;包括知识产权持有人的地理分布。该文件由 QuIC 知识产权&#xff08;IP&#xff09;与贸易…

3DTiles特性与内容解析

一篇19年整理的比较老的笔记了。更多精彩内容尽在数字孪生平台。 瓦片种类 3DTiles瓦片有多种类型&#xff1a; b3dm(Batched 3D Model&#xff0c;批量3D模型) b3dm瓦片存储了多个个体&#xff0c;b3dm中的glb代表的实际对象应该具有相同的种类但是可能数据内容不同。b3dm…

ABAP开发:SAPscript表单设计及打印简介

在SAP ERP系统应用中&#xff0c;通常利用Forms表单来定制诸如发票、支票及标签之类的特殊文档的打印格式。这些Forms用来描述文档页面中的信息结构&#xff0c;比如地址抬头、item行、页脚等等&#xff0c;Forms设计就是要确定这些文档的输出格式。 利用SAPscript工具进行Form…

html+css 选择器优先级

1.基本选择器优先级 id>class>tagname(标签选择器)>*(通配符选择器) <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>基本选择器的优先级</title><style type"text/css"…

ShaderLab的混合命令

文章目录 示例原理混合因子混合操作参考 示例 Pass {Tags{"LightMode" "ForwardBase"}// 关闭深度写入ZWrite Off// 设置Pass的混合模式&#xff0c;SrcAlpha: 片元着色器产生的颜色的混合因子// OneMinusSrcAlpha 已经存在于颜色缓冲中的颜色的混合因子…

vue实现左右两栏布局宽度可拖拽

项目里需要左右两栏布局根据内容多少可以用户自己拖拽宽度的需求 找了文章参考了下&#xff0c;但都没有实现我要的效果&#xff0c;所以结合调整了一下&#xff0c;记录一下我自己用到的效果 参考文章放下面了&#xff0c;感谢两位大佬 vue拖拽 html实现拖拽 最终效果实现…

STM32 cubemx hal库huart串口接收不到第一帧数据或数据全为0的问题

存在问题的stm32工程是使用cubemx搭建stm32串口dma通讯的工程. 问题是&#xff1a; 每次上电后&#xff0c;串口接收第一帧数据全部都为0&#xff0c;第二帧及以后接收的数据都是正确。 原因是&#xff1a; 以下2行代码&#xff0c;放在void HAL_UART_MspInit(UART_HandleT…

easyExcel - 带图片导出

目录 前言一、情景介绍二、问题分析三、代码实现1. 单图片导出2. 多图片导出3. 多图片导出&#xff08;优化&#xff09; 前言 Java-easyExcel入门教程&#xff1a;https://blog.csdn.net/xhmico/article/details/134714025 之前有介绍过如何使用 easyExcel&#xff0c;以及写…

适用于芯片行业的开发及管理工具:版本控制、持续集成、代码分析及项目管理工具介绍

3月28日-29日&#xff0c;2024国际集成电路展览会暨研讨会&#xff08;IIC Shanghai&#xff09;在上海成功举行。此次盛会汇聚了集成电路产业的众多领军企业&#xff0c;共同探寻和把握集成电路产业的发展脉络。 龙智携芯片研发及管理解决方案亮相展会&#xff0c;展示如何通…

什么是外汇杠杆交易?

外汇杠杆交易是目前的外汇交易市场中&#xff0c;投资者进行外汇交易的重要方式&#xff0c;通过这样的交易方式&#xff0c;投资者就有机会进行以小搏大的交易&#xff0c;他们的交易就有可能会更成功&#xff0c;因此&#xff0c;投资者应该对这样的交易方式进行了解&#xf…

springboot 集成 activemq

文章目录 一&#xff1a;说明二&#xff1a;e-car项目配置1 引入activemq依赖2 application启动类配置消息监听3 application.yml配置4 MQConfig.java 配置类5 ecar 项目中的监听6 junit 发送消息 三&#xff1a;tcm-chatgpt项目配置5 MQListener.java 监听消息 三 测试启动act…

RV1126添加gc2093摄像头

前言 上篇讲的是双目摄像头GC2053摄像头进行拉流&#xff0c;本篇介绍下如何适配添加RGB Sensor GC2093并且可以在windows上成功拉取视频流 平台背景 开发板&#xff1a;易百纳开发板 cpu: rv1126 sensor: gc2093 200w像素 2lanes type&#xff1a;MIPI kernel: 4.19.111 sys…

K8S深度解析:从入门到精通的全方位指南

目录 一、Kubernetes简介 二、Kubernetes的核心作用 三、Kubernetes架构图例 四、Kubernetes核心概念 Harbor仓库概述&#xff1a; Master----管理组件&#xff1a; API Server&#xff08;集群之心&#xff09;&#xff1a; Scheduler&#xff08;调度大师&…

基于Transformer深度学习的翻译模型(英->中)源码系统

第一步&#xff1a;Transformer介绍 Transformer是一种基于注意力机制的序列到序列模型&#xff0c;它在机器翻译任务中表现出色并逐渐成为自然语言处理领域的主流模型。Transformer模型的核心思想是使用自注意力机制&#xff08;self-attention&#xff09;来捕捉输入序列中各…

Redis系列:内存淘汰策略

1 前言 通过前面的一些文章我们知道&#xff0c;Redis的各项能力是基于内存实现的&#xff0c;相对其他的持久化存储&#xff08;如MySQL、File等&#xff0c;数据持久化在磁盘上&#xff09;&#xff0c;性能会高很多&#xff0c;这也是高速缓存的一个优势。 但是问题来了&am…

如果通过Glide 设置图片圆角

要给图片设置一个圆角,通常方法是在ImageView 标签外添加一个CardView 标签,然后设置圆角值,但是今天遇到一个问题就是 RecyclerView Item 中这样操作的话会遇到这样的一个报错: Cannot call this method while RecyclerView is computing a layout or scrolling androidx.rec…