Java个人博客系统
这是一个基于Spring Boot + MyBatis + Thymeleaf开发的个人博客系统,功能完善、界面简洁美观,支持Markdown文章编写、文章管理、评论管理、分类标签等核心博客功能。系统采用前后端不分离架构,适合Spring Boot初学者学习和个人博客搭建使用。
项目说明
Java个人博客系统
项目简介
这是一个基于Spring Boot + MyBatis + Thymeleaf开发的个人博客系统,功能完善、界面简洁美观,支持Markdown文章编写、文章管理、评论管理、分类标签等核心博客功能。系统采用前后端不分离架构,适合Spring Boot初学者学习和个人博客搭建使用。
技术栈
后端技术
| 技术 | 版本/说明 |
|---|---|
| 核心框架 | Spring Boot 1.5.14 |
| 持久层框架 | MyBatis 1.3.2 |
| 模板引擎 | Thymeleaf 3.0.2 |
| 数据库 | MySQL 5.7+ |
| 数据库连接池 | Druid 1.1.9 |
| 分页插件 | PageHelper 1.2.5 |
| 缓存框架 | Ehcache (Spring Boot Cache) |
| Markdown解析 | Commonmark 0.8.0 |
| 文件存储 | 七牛云 SDK 7.2.11 |
| API文档 | Swagger 2.2.2 |
| 工具类 | Apache Commons Lang3 3.4 |
前端技术
| 技术 | 说明 |
|---|---|
| JS框架 | jQuery |
| CSS框架 | Bootstrap |
| 富文本编辑器 | Editor.md (Markdown编辑器) |
| 文件上传 | Dropzone |
| 弹框插件 | SweetAlert |
第三方服务
- 七牛云对象存储(图片/文件上传)
- 百度统计(网站访问统计)
项目特点
- Markdown支持:完整支持Markdown语法,支持.md文件导入
- Hexo兼容:模仿Hexo生成的访问路径,方便从Hexo迁移
- 后台管理:提供完善的后台管理界面,方便文章管理
- 评论系统:内置评论功能,支持评论管理
- 分类标签:支持文章分类和标签管理
- 文件上传:集成七牛云存储,支持图片上传
- 缓存优化:使用Ehcache提升访问性能
- 响应式设计:前台界面响应式布局,适配移动端
功能模块
前台功能
1. 首页
- 文章列表展示
- 分页浏览
- 文章摘要预览
- 侧边栏(分类、标签、最新文章)
2. 文章详情
- Markdown渲染展示
- 文章信息(发布时间、分类、标签、浏览量)
- 评论列表
- 评论发表
- 上一篇/下一篇导航
3. 文章归档
- 按时间归档
- 按分类浏览
- 按标签浏览
4. 关于页面
- 个人介绍
- 社交链接
后台管理功能
1. 文章管理 (/admin/article)
- 文章列表
- 新增文章
- 编辑文章
- 删除文章
- Markdown编辑器
- 文章发布/草稿
- 设置分类和标签
- 上传封面图
2. 评论管理 (/admin/comments)
- 评论列表
- 评论审核
- 评论删除
- 评论回复
3. 分类管理 (/admin/category)
- 分类列表
- 新增分类
- 编辑分类
- 删除分类
4. 标签管理 (/admin/tag)
- 标签列表
- 新增标签
- 编辑标签
- 删除标签
5. 文件管理 (/admin/attach)
- 文件列表
- 文件上传(本地/七牛云)
- 文件删除
6. 系统设置 (/admin/setting)
- 网站标题
- 网站描述
- 网站备案号
- 社交链接配置
- 百度统计配置
- Google验证配置
7. 操作日志 (/admin/logs)
- 系统操作记录
- 登录日志
- 操作时间/IP记录
项目结构
java-blog/
├── src/
│ └── main/
│ ├── java/
│ │ └── com/wip/
│ │ ├── config/ # 配置类
│ │ │ ├── WebMvcConfig.java # MVC配置
│ │ │ ├── CacheConfig.java # 缓存配置
│ │ │ └── SwaggerConfig.java # Swagger配置
│ │ ├── controller/ # 控制器
│ │ │ ├── admin/ # 后台控制器
│ │ │ │ ├── ArticleController.java
│ │ │ │ ├── CategoryController.java
│ │ │ │ ├── CommentController.java
│ │ │ │ ├── AttachController.java
│ │ │ │ └── SettingController.java
│ │ │ └── home/ # 前台控制器
│ │ │ ├── IndexController.java
│ │ │ └── ArticleController.java
│ │ ├── dao/ # 数据访问层
│ │ │ ├── AttachDao.java
│ │ │ ├── CommentDao.java
│ │ │ ├── ContentDao.java
│ │ │ ├── LogDao.java
│ │ │ ├── MetaDao.java
│ │ │ ├── OptionDao.java
│ │ │ └── UserDao.java
│ │ ├── model/ # 实体类
│ │ │ ├── AttachDomain.java
│ │ │ ├── CommentDomain.java
│ │ │ ├── ContentDomain.java
│ │ │ ├── LogDomain.java
│ │ │ ├── MetaDomain.java
│ │ │ └── UserDomain.java
│ │ ├── service/ # 业务逻辑层
│ │ │ ├── IArticleService.java
│ │ │ ├── ICommentService.java
│ │ │ ├── IMetaService.java
│ │ │ ├── IAttachService.java
│ │ │ └── impl/ # 实现类
│ │ ├── utils/ # 工具类
│ │ │ ├── TaleUtils.java
│ │ │ ├── DateKit.java
│ │ │ ├── IPKit.java
│ │ │ └── MarkdownUtils.java
│ │ ├── interceptor/ # 拦截器
│ │ │ └── BaseInterceptor.java
│ │ └── MyBlogApplication.java # 启动类
│ │
│ └── resources/
│ ├── mapper/ # MyBatis映射文件
│ │ ├── AttachMapper.xml
│ │ ├── CommentMapper.xml
│ │ ├── ContentMapper.xml
│ │ ├── LogMapper.xml
│ │ ├── MetaMapper.xml
│ │ └── UserMapper.xml
│ ├── static/ # 静态资源
│ │ ├── admin/ # 后台静态资源
│ │ │ ├── css/
│ │ │ ├── js/
│ │ │ └── plugins/
│ │ └── user/ # 前台静态资源
│ │ ├── css/
│ │ ├── js/
│ │ └── img/
│ ├── templates/ # Thymeleaf模板
│ │ ├── admin/ # 后台页面
│ │ │ ├── article_edit.html
│ │ │ ├── article_list.html
│ │ │ ├── comment_list.html
│ │ │ ├── category.html
│ │ │ ├── attach.html
│ │ │ ├── setting.html
│ │ │ └── login.html
│ │ └── themes/ # 前台主题
│ │ └── default/
│ │ ├── index.html
│ │ ├── post.html
│ │ ├── archive.html
│ │ └── about.html
│ ├── application.yml # 主配置文件
│ ├── application-dev.yml # 开发环境配置
│ └── application-prod.yml # 生产环境配置
│
├── upload/ # 本地上传文件目录
├── lu_tale.sql # 数据库SQL文件
├── pom.xml # Maven配置
├── README.md # 项目说明
└── 个人博客.mp4 # 演示视频
数据库设计
核心数据表
1. t_users - 用户表
uid INT 用户ID
username VARCHAR(32) 用户名
password VARCHAR(64) 密码(MD5加密)
email VARCHAR(200) 邮箱
screenName VARCHAR(32) 昵称
homeUrl VARCHAR(200) 个人主页
created INT 创建时间
groupName VARCHAR(16) 用户组
2. t_contents - 文章表
cid INT 文章ID
title VARCHAR(200) 文章标题
titlePic VARCHAR(55) 封面图
slug VARCHAR(200) 文章路径
created INT 创建时间
modified INT 修改时间
content TEXT 文章内容
authorId INT 作者ID
type VARCHAR(16) 类型(post/page)
status VARCHAR(16) 状态(publish/draft)
tags VARCHAR(200) 标签
categories VARCHAR(200) 分类
hits INT 浏览量
commentsNum INT 评论数
allowComment TINYINT 允许评论
3. t_comments - 评论表
coid INT 评论ID
cid INT 文章ID
created INT 评论时间
author VARCHAR(200) 评论者
authorId INT 评论者ID
mail VARCHAR(200) 邮箱
url VARCHAR(200) 网址
ip VARCHAR(64) IP地址
content TEXT 评论内容
status VARCHAR(16) 状态(approved/waiting)
parent INT 父评论ID
4. t_metas - 分类/标签表
mid INT ID
name VARCHAR(200) 名称
slug VARCHAR(200) 路径
type VARCHAR(32) 类型(category/tag)
description VARCHAR(200) 描述
sort INT 排序
5. t_relationships - 关联表
cid INT 文章ID
mid INT 分类/标签ID
6. t_attach - 附件表
id INT 附件ID
fname VARCHAR(100) 文件名
ftype VARCHAR(50) 文件类型
fkey TEXT 文件路径
authorId INT 上传者ID
created INT 上传时间
7. t_options - 系统配置表
name VARCHAR(32) 配置名
value VARCHAR(1000) 配置值
description VARCHAR(200) 描述
8. t_logs - 操作日志表
id INT 日志ID
action VARCHAR(100) 操作
data VARCHAR(2000) 数据
authorId INT 操作者ID
ip VARCHAR(20) IP地址
created INT 操作时间
运行环境要求
开发环境
- JDK 1.8+
- Maven 3.0+
- MySQL 5.7+
- IDE(推荐IntelliJ IDEA或Eclipse)
生产环境
- JDK 1.8+
- MySQL 5.7+
- Tomcat 8.0+(可选,Spring Boot内置)
快速开始
1. 克隆项目
git clone <repository-url>
cd java-blog
2. 创建数据库
CREATE DATABASE lu_tale CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
3. 导入数据库
mysql -u root -p lu_tale < lu_tale.sql
4. 修改配置
编辑 src/main/resources/application-dev.yml:
spring:
datasource:
url: jdbc:mysql://localhost:3306/lu_tale?useUnicode=true&characterEncoding=utf-8&useSSL=false
username: root # 修改为你的数据库用户名
password: root # 修改为你的数据库密码
driver-class-name: com.mysql.jdbc.Driver
5. 配置七牛云(可选)
如需使用七牛云存储,编辑配置文件添加:
qiniu:
access-key: your_access_key
secret-key: your_secret_key
bucket: your_bucket_name
domain: your_domain
6. 编译运行
方式一:IDE运行
- 使用IDE导入Maven项目
- 运行
MyBlogApplication.java主类
方式二:Maven命令运行
# 编译打包
mvn clean package
# 运行
java -jar target/springboot-blog-1.0.0-SNAPSHOT.jar
方式三:Maven插件运行
mvn spring-boot:run
7. 访问系统
- 前台地址:http://localhost:8888
- 后台地址:http://localhost:8888/admin
- 默认账号:
- 用户名:
admin - 密码:
123456
- 用户名:
配置说明
端口配置
修改 application.yml:
server:
port: 8888 # 修改为你想要的端口
文件上传配置
# 本地上传路径
upload:
path: /path/to/upload/ # 修改为你的上传目录
缓存配置
系统使用Ehcache作为缓存,配置文件位于 src/main/resources/ehcache.xml
日志配置
日志配置位于 application.yml:
logging:
level:
com.wip: debug
org.springframework: info
使用指南
1. 发布文章
- 登录后台管理系统
- 点击"文章管理" → "发布文章"
- 填写文章标题
- 使用Markdown编辑器编写内容
- 选择分类和标签
- 上传封面图(可选)
- 点击"发布"
2. 导入Markdown文件
- 进入"文章管理"
- 点击"导入文章"
- 选择.md文件
- 系统自动解析并创建文章
3. 管理评论
- 进入"评论管理"
- 查看所有评论
- 可以删除或回复评论
4. 设置分类和标签
- 进入"分类管理"或"标签管理"
- 添加新的分类/标签
- 编辑或删除现有分类/标签
5. 系统设置
- 进入"系统设置"
- 配置网站基本信息
- 设置社交链接
- 配置统计代码
主要功能实现
Markdown渲染
使用Commonmark库实现Markdown解析:
// MarkdownUtils.java
public static String mdToHtml(String markdown) {
Parser parser = Parser.builder().build();
Node document = parser.parse(markdown);
HtmlRenderer renderer = HtmlRenderer.builder().build();
return renderer.render(document);
}
文章分页
使用PageHelper实现分页:
PageHelper.startPage(page, limit);
List<ContentDomain> articles = contentDao.getArticles();
PageInfo<ContentDomain> pageInfo = new PageInfo<>(articles);
缓存使用
使用Spring Cache注解:
@Cacheable(value = "articleCache", key = "#cid")
public ContentDomain getArticleById(Integer cid) {
return contentDao.selectByKey(cid);
}
文件上传
支持本地和七牛云两种方式:
// 本地上传
public String uploadLocal(MultipartFile file) {
String fileName = file.getOriginalFilename();
String filePath = uploadPath + fileName;
file.transferTo(new File(filePath));
return filePath;
}
// 七牛云上传
public String uploadQiniu(MultipartFile file) {
Auth auth = Auth.create(accessKey, secretKey);
String token = auth.uploadToken(bucket);
Response response = uploadManager.put(file.getBytes(), fileName, token);
return domain + fileName;
}
扩展建议
如需进一步完善项目,可考虑以下扩展:
- 用户系统:支持用户注册、登录、个人中心
- 文章搜索:集成Elasticsearch实现全文搜索
- RSS订阅:生成RSS feed
- SEO优化:添加sitemap、robots.txt
- 社交分享:集成社交媒体分享功能
- 邮件通知:评论通知、订阅通知
- 多主题支持:支持切换不同主题
- Markdown增强:支持更多Markdown扩展语法
- 图片压缩:上传时自动压缩图片
- 访问统计:更详细的访问统计分析
注意事项
- 首次运行需要导入SQL文件创建数据库表
- 默认管理员密码为123456,建议首次登录后修改
- 生产环境建议使用HTTPS
- 定期备份数据库数据
- 上传文件建议使用七牛云等对象存储服务
- 注意配置文件中的敏感信息安全
常见问题
Q: 数据库连接失败?
A: 检查MySQL服务是否启动,数据库配置是否正确
Q: 图片无法显示?
A: 检查上传路径配置,确保目录有写入权限
Q: 后台无法登录?
A: 确认数据库中users表有管理员账号,密码是否正确
Q: Markdown渲染异常?
A: 检查Commonmark依赖是否正确引入
Q: 缓存不生效?
A: 检查Ehcache配置,确保缓存注解正确使用
演示视频
项目包含演示视频文件:个人博客.mp4,展示了系统的完整功能。
适用对象
- Spring Boot初学者:综合运用Spring Boot核心知识
- 博客搭建者:快速搭建个人博客网站
- Hexo用户:提供后台管理界面,兼容Hexo路径
- 学习者:学习完整的Web项目开发流程
许可证
本项目仅供学习交流使用,请勿用于商业用途。
如有问题,欢迎提Issue或联系作者。
祝使用愉快! 📝✨
技术分类
包含内容
适用人群
学习参考与二次开发
关于 AI源码
AI源码 专注优质项目源码分享,提供完整源码、详细文档与技术支持,助力源码设计与课程作业。
相关推荐
查看全部 →
本地生活小程序
本项目是一个基于微信小程序原生开发的本地生活服务平台,提供餐厅推荐、招聘信息、生活服务分类、近期活动展示等功能,是一个典型的O2O本地生活服务类小程序。

电影购票网站
基于原生 HTML、CSS、JavaScript 实现的 PC 端电影在线购票演示网站。数据使用本地 Mock 模拟,订单与座位占用状态通过浏览器 持久化,无需后端服务,直接用浏览器打开 即可运行。

家乡介绍小程序
这是一个家乡文化展示与旅游推荐的微信小程序,采用纯前端实现,使用本地Mock数据模拟后端接口。项目以广东省惠州市惠东县为示例,完整实现了景点浏览、美食推荐、乡镇介绍、历史回顾、收藏管理等核心功能,适合作为微信小程序开发学习项目或计算机设计参考。

乡村振兴三农小程序
这是一个乡村振兴与三农服务的微信小程序,采用纯前端实现,使用本地Mock数据模拟后端接口。项目完整实现了政策解读、农业科技、数字乡村、乡村旅游、农产品展销、乡风文明、人才振兴、基层党建、经验分享等核心功能模块,适合作为微信小程序开发学习项目或计算机设计参考。

图书借阅小程序
这是一个图书借阅管理的微信小程序,采用纯前端实现,使用本地Mock数据模拟后端接口。项目完整实现了图书浏览、分类筛选、搜索查询、收藏管理、借阅下单、订单管理等核心功能,适合作为微信小程序开发学习项目或计算机设计参考。

垃圾上门回收小程序
这是一个完整的垃圾上门回收服务平台,包含微信小程序端。系统实现了垃圾分类回收预约、订单管理、地址管理、系统配置等核心功能,采用Egg.js后端框架,适合作为微信小程序全栈开发学习项目或计算机设计参考。