# blog1 **Repository Path**: linlw/blog1 ## Basic Information - **Project Name**: blog1 - **Description**: 参照 SpringBoot开发一个小而美的个人博客_哔哩哔哩_bilibili - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-11-16 - **Last Updated**: 2021-11-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## Spring Boot开发小而美的个人博客 https://blog.csdn.net/qq_42166923/article/details/104417859 https://github.com/pengzihao1999/pengzihao1999.github.io/tree/master/java/blog1 d:\dev, git clone https://github.com/pengzihao1999/pengzihao1999.github.io.git 参照 SpringBoot开发一个小而美的个人博客_哔哩哔哩_bilibili 后台地址为:http://localhost:8080/admin 账号:admin 密码:111111 Spring Boot开发小而美的个人博客 作者:李仁密 个人博客功能: 技术组合: 后端:Spring Boot + JPA + thymeleaf模板 数据库:MySQL 前端UI:Semantic UI框架 工具与环境: IDEA Maven 3 JDK 8 Axure RP 8 课程内容模块: 需求分析与功能规划 页面设计与开发 技术框架搭建 后端管理功能实现 前端管理功能实现 你能学得什么? 基于Spring Boot的完整全栈式的开发套路 Semantic UI框架的使用 一套博客系统的源代码与设计 1、需求与功能 1.1 用户故事 用户故事是敏捷框架中的一种开发方法。可以帮助开发者转换视角,以用户的角度更好的把握需求,从而实现具有商业价值的功能。 用户故事最好是用户团队编写 用户故事模板: As a (role of user), I want (some feature) so that (some business value). 作为一个(某个角色) 使用者,我可以做(某个功能) 事情,如此可以有(某个商业价值) 的好处 关键点:角色、功能、商业价值 举例: 作为一个招聘网站注册用户,我想查看最近3天发布的招聘信息,以便于了解最新的招聘信息。 作为公司,可以张贴新工作。 个人博客系统的用户故事: 角色:普通访客,管理员(我) 访客,可以分页查看所有的博客 访客,可以快速查看博客数最多的6个分类 访客,可以查看所有的分类 访客,可以查看某个分类下的博客列表 访客,可以快速查看标记博客最多的10个标签 访客,可以查看所有的标签 访客,可以查看某个标签下的博客列表 访客,可以根据年度时间线查看博客列表 访客,可以快速查看最新的推荐博客 访客,可以用关键字全局搜索博客 访客,可以查看单个博客内容 访客,可以对博客内容进行评论 访客,可以赞赏博客内容 访客,可以微信扫码阅读博客内容 访客,可以在首页扫描公众号二维码关注我 我,可以用户名和密码登录后台管理 我,可以管理博客 我,可以发布新博客 我,可以对博客进行分类 我,可以对博客打标签 我,可以修改博客 我,可以删除博客 我,可以根据标题,分类,标签查询博客 我,可以管理博客分类 我,可以新增一个分类 我,可以修改一个分类 我,可以删除一个分类 我,可以根据分类名称查询分类 我,可以管理标签 我,可以新增一个标签 我,可以修改一个标签 我,可以删除一个标签 我,可以根据名称查询标签 1.2 功能规划 2、页面设计与开发 2.1 设计 页面规划: 前端展示:首页、详情页、分类、标签、归档、关于我 后台管理:模板页 2.2 页面开发 Semantic UI官网 Semantic UI中文官网 WebStorm下载与破解 背景图片资源 2.3 插件集成 编辑器 Markdown 内容排版 typo.css 动画 animate.css 代码高亮 prism 目录生成 Tocbot 滚动侦测 waypoints 平滑滚动 jquery.scrollTo 二维码生成 qrcode.js 3、框架搭建 IDEA下载 https://www.jetbrains.com/idea/ 3.1 构建与配置 1、引入Spring Boot模块: web Thymeleaf JPA MySQL Aspects DevTools 2、application.yml配置 使用 thymeleaf 3 pom.xml: 数据库连接配置 日志配置 application.yml: 2.2.2 ​ logback-spring.xml: 生产环境与开发环境配置 application-dev.yml application-pro.yml 3.2 异常处理 1、定义错误页面 404 500 error 2、全局处理异常 统一处理异常: 错误页面异常信息显示处理: 3、资源找不到异常 3.3 日志处理 1、记录日志内容 请求 url 访问者 ip 调用方法 classMethod 参数 args 返回内容 2、记录日志类: 3.4 页面处理 1、静态页面导入project 2、thymeleaf布局 定义fragment 使用fragment布局 3、错误页面美化 4、设计与规范 4.1 实体设计 实体类: 博客 Blog 博客分类 Type 博客标签 Tag 博客评论 Comment 用户 User 实体关系: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XWSICjI3-1582203013135)(http://on91wk3hn.bkt.clouddn.com/17-10-14/87092095.jpg)] 评论类自关联关系: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NhxlnYXR-1582203013136)(http://on91wk3hn.bkt.clouddn.com/17-10-14/41296045.jpg)] Blog类: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-myqJaCbm-1582203013144)(http://on91wk3hn.bkt.clouddn.com/17-10-14/38390041.jpg)] Type类: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Is2FkJv5-1582203013148)(http://on91wk3hn.bkt.clouddn.com/17-10-14/22984471.jpg)] Tag类: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fOdhq0Yp-1582203013149)(http://on91wk3hn.bkt.clouddn.com/17-10-14/70860077.jpg)] Comment类: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xWsMOwIz-1582203013151)(http://on91wk3hn.bkt.clouddn.com/17-10-14/77104424.jpg)] User类: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MlaYMyZe-1582203013152)(http://on91wk3hn.bkt.clouddn.com/17-10-14/10367795.jpg)] 4.2 应用分层 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NnhzTY13-1582203013153)(http://on91wk3hn.bkt.clouddn.com/17-10-14/64528736.jpg)] 4.3 命名约定 Service/DAO层命名约定: 获取单个对象的方法用get做前缀。 获取多个对象的方法用list做前缀。 获取统计值的方法用count做前缀。 插入的方法用save(推荐)或insert做前缀。 删除的方法用remove(推荐)或delete做前缀。 修改的方法用update做前缀。 5、后台管理功能实现 5.1 登录 1、构建登录页面和后台管理首页 2、UserService和UserRepository 3、LoginController实现登录 4、MD5加密 5、登录拦截器 5.2 分类管理 1、分类管理页面 2、分类列表分页 3、分类新增、修改、删除 5.3 标签管理 5.4 博客管理 1、博客分页查询 2、博客新增 3、博客修改 4、博客删除 6、前端展示功能实现 6.1 首页展示 1、博客列表 2、top分类 3、top标签 4、最新博客推荐 5、博客详情 1、Markdown 转换 HTML commonmark-java https://github.com/atlassian/commonmark-java pom.xml引用commonmark和扩展插件 2、评论功能 评论信息提交与回复功能 评论信息列表展示功能 管理员回复评论功能 6.2 分类页 6.3 标签页 6.4 归档页 6.5 关于我 ··· ## blog.sql ``` /* Navicat Premium Data Transfer Source Server : localhost_3307 Source Server Type : MySQL Source Server Version : 50642 Source Host : localhost:3307 Source Schema : blog Target Server Type : MySQL Target Server Version : 50642 File Encoding : 65001 Date: 16/11/2019 12:28:30 */ SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for t_blog -- ---------------------------- DROP TABLE IF EXISTS `t_blog`; CREATE TABLE `t_blog` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `appreciation` bit(1) NOT NULL, `commentabled` bit(1) NOT NULL, `content` longtext CHARACTER SET utf8 COLLATE utf8_bin, `create_time` datetime(0) DEFAULT NULL, `description` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, `first_picture` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, `flag` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, `published` bit(1) NOT NULL, `recommend` bit(1) NOT NULL, `share_statement` bit(1) NOT NULL, `title` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, `update_time` datetime(0) DEFAULT NULL, `views` int(11) DEFAULT NULL, `type_id` bigint(20) DEFAULT NULL, `user_id` bigint(20) DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE, INDEX `FK292449gwg5yf7ocdlmswv9w4j`(`type_id`) USING BTREE, INDEX `FK8ky5rrsxh01nkhctmo7d48p82`(`user_id`) USING BTREE, CONSTRAINT `FK292449gwg5yf7ocdlmswv9w4j` FOREIGN KEY (`type_id`) REFERENCES `t_type` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT, CONSTRAINT `FK8ky5rrsxh01nkhctmo7d48p82` FOREIGN KEY (`user_id`) REFERENCES `t_user` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT ) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Compact; -- ---------------------------- -- Records of t_blog -- ---------------------------- INSERT INTO `t_blog` VALUES (1, b'0', b'1', '我就是我不一样的烟火', '2019-11-08 21:58:12', '天黑时,你在,天亮时,你已成灰!!!', 'https://unsplash.it/100/100?image=1005', '', b'1', b'0', b'0', '天不中意你', '2019-11-08 21:58:12', 2, 1, 1); INSERT INTO `t_blog` VALUES (2, b'1', b'1', '小凌是一个大笨蛋,从来都是,一直没变过,而且有些许猥琐的柑橘', '2019-11-15 13:38:21', '小凌是一个大笨蛋,从来都是,一直没变过,而且有些许猥琐的柑橘', 'https://picsum.photos/536/354', '', b'1', b'1', b'1', '我是小凌', '2019-11-15 13:38:21', 3, 1, 1); INSERT INTO `t_blog` VALUES (3, b'0', b'0', '最代码官方验证通过\r\n\r\n这个编辑器不错', '2019-11-16 12:27:08', '最代码官方验证通过', 'http://static.zuidaima.com//uploads/1/201703/20170312181519534.png', '', b'1', b'1', b'1', '最代码官方验证通过', '2019-11-16 12:27:08', 1, 1, 1); -- ---------------------------- -- Table structure for t_blog_tags -- ---------------------------- DROP TABLE IF EXISTS `t_blog_tags`; CREATE TABLE `t_blog_tags` ( `blogs_id` bigint(20) NOT NULL, `tags_id` bigint(20) NOT NULL, INDEX `FK5feau0gb4lq47fdb03uboswm8`(`tags_id`) USING BTREE, INDEX `FKh4pacwjwofrugxa9hpwaxg6mr`(`blogs_id`) USING BTREE, CONSTRAINT `FK5feau0gb4lq47fdb03uboswm8` FOREIGN KEY (`tags_id`) REFERENCES `t_tag` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT, CONSTRAINT `FKh4pacwjwofrugxa9hpwaxg6mr` FOREIGN KEY (`blogs_id`) REFERENCES `t_blog` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Compact; -- ---------------------------- -- Records of t_blog_tags -- ---------------------------- INSERT INTO `t_blog_tags` VALUES (2, 1); INSERT INTO `t_blog_tags` VALUES (3, 1); INSERT INTO `t_blog_tags` VALUES (3, 2); INSERT INTO `t_blog_tags` VALUES (3, 3); -- ---------------------------- -- Table structure for t_comment -- ---------------------------- DROP TABLE IF EXISTS `t_comment`; CREATE TABLE `t_comment` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `admin_comment` bit(1) NOT NULL, `avatar` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, `content` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, `create_time` datetime(0) DEFAULT NULL, `email` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, `nickname` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, `blog_id` bigint(20) DEFAULT NULL, `parent_comment_id` bigint(20) DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE, INDEX `FKke3uogd04j4jx316m1p51e05u`(`blog_id`) USING BTREE, INDEX `FK4jj284r3pb7japogvo6h72q95`(`parent_comment_id`) USING BTREE, CONSTRAINT `FK4jj284r3pb7japogvo6h72q95` FOREIGN KEY (`parent_comment_id`) REFERENCES `t_comment` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT, CONSTRAINT `FKke3uogd04j4jx316m1p51e05u` FOREIGN KEY (`blog_id`) REFERENCES `t_blog` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Compact; -- ---------------------------- -- Table structure for t_tag -- ---------------------------- DROP TABLE IF EXISTS `t_tag`; CREATE TABLE `t_tag` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Compact; -- ---------------------------- -- Records of t_tag -- ---------------------------- INSERT INTO `t_tag` VALUES (1, '坚强'); INSERT INTO `t_tag` VALUES (2, '想法'); INSERT INTO `t_tag` VALUES (3, '思考'); -- ---------------------------- -- Table structure for t_type -- ---------------------------- DROP TABLE IF EXISTS `t_type`; CREATE TABLE `t_type` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Compact; -- ---------------------------- -- Records of t_type -- ---------------------------- INSERT INTO `t_type` VALUES (1, '技术篇'); INSERT INTO `t_type` VALUES (2, '生活篇'); INSERT INTO `t_type` VALUES (3, '娱乐篇'); INSERT INTO `t_type` VALUES (4, '最代码'); -- ---------------------------- -- Table structure for t_user -- ---------------------------- DROP TABLE IF EXISTS `t_user`; CREATE TABLE `t_user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `avatar` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, `create_time` datetime(0) DEFAULT NULL, `email` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, `nickname` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, `password` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, `type` int(11) DEFAULT NULL, `update_time` datetime(0) DEFAULT NULL, `username` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Compact; -- ---------------------------- -- Records of t_user -- ---------------------------- INSERT INTO `t_user` VALUES (1, 'https://unsplash.it/100/100?image=1005', '2019-11-15 12:36:04', '54501@qq.com', '小凌', '96e79218965eb72c92a549dd5a330112', 1, '2019-11-15 12:36:23', 'admin'); SET FOREIGN_KEY_CHECKS = 1; ```