项目演示地址:blog
本项目适合刚学完springboot拿来练手
项目源码:https://github.com/lany1721/blog 感谢star
前言
这段时间呢,接触了一些spring boot的内容后,对比以前用ssm来搭建项目所需要的“配置地狱”,使用springboot简直是酸爽,这真的是春天哈哈哈。
学了springboot之后,就一直想找一个练手的项目,在网上看到很多开发者用springboot来搭建博客,自己也想跟风试试哈哈哈,正好也可以检验一下自己。其实我之前是有搭建过一个博客项目的,不过因为页面太丑陋、没有做需求,导致后面代码增增改改搞得好乱,就把那个项目废弃了。所以为了不重蹈覆辙,这次打算顺着开发的流程来。
需求分析与功能规划
角色
通过网站面向的角色来分析,我们可很清楚的知道这个项目大概所需要的功能,这个项目可以很简单地知道有两个角色:
访客
-
博主
这里通过简单的导图来描述两个角色分别可能需要什么功能
访客
访客的分析关乎我们前端页面所需要展示的页面功能,以及页面信息的重要程度的排版问题
博主
首先,访客有的功能,身为网站的管理员,都应该拥有,然后博主还应该拥有管理的权限,即增删改
管理员需求的功能应该有:
展示
通过访客这一角色的分析,对博客的展示页面进行划分
主页:主页最重要的信息应该是展现出博文列表,当然了如果只有博文列表的话,主页有点太单调了,所以可以有丰富的元素来点缀一下,比如巨幕图。
文章页:显示文章内容和文章元数据(分类、标签、日期、浏览量、作者),评论列表,版权信息等。
分类页:初步设想是展现出所有的分类就好,因为分类不会很多,所以也不打算进行分页展示。点击某个分类,可以跳转到分类项页面查看对应分类下的所有博文,分类项页面实现分页展示
标签页:跟分类页一样
归档页:直接按时间线展示出所有的博文,一个页面分成两列展示。
顶部导航栏:没什么好说的,就是用来页面导航
侧边栏:在博文页中,充当文章目录功能,对文章进行导航。在其他页面,除了与顶部导航栏相识,还展现友链信息,博主的简要信息。
后台
博客:展示博客的元数据,提供对博客进行管理的接口功能
个人信息页:主要可以修改关于我的内容,修改登录密码等
分类/标签/友链:可以进行增删改。
技术选型
需求分析做完呢,就可以来根据网站的功能啊、承载量啊等等来进行技术选型了。因为我这个网站没什么特别的需求,而且我会的技术也不多,所以技术分析自然而然就不存在的。这里就列一下大概会用到的技术和中间件
- 数据库相关:MySQL 5.7、Redis
- web后端相关:SpringBoot 2.0 、Thymeleaf
- web前端:Semantic UI、Hexo
- 工具和中间件:Maven3、IDEA、Git
- 环境:JDK8
设计与规范
关于前端
因为我是学后端的,对前端的开发很不了解。前端页面我就采用了拿来主义惹。
前台的展示我用Hexo的主题,后台用Semantic UI搭建的;这里建议可以去Hexo里主题看看有没有自己喜欢的风格,然后可以直接用Hexo生成我们要的静态页面,非常的省心省力。
我用的Hexo主题:Melody 感谢作者提供这么好看的主题
Semantic UI的官方文档:Semantic UI
关于评论
因为没有访客登录注册功能,访客评论的时候又要输昵称又要邮箱的,挺麻烦的,而且也没有头像显示这个功能,所以评论功能打算用第三方的评论插件gittalk来完成
Gitalk的官网:gittalk
实体类的构建
根据前面需求分析,大概可以构建出如上图的5个类。图示中,类的属性、类与类之间的关系都可以明确知道。
解释一下不明确的属性:
Blog类
String blogType; 表示文章的类型,转载还是原创
String blogBrief; 文章的简介,显示在主页上的简要博文内容
Boolean published; 是否发布
Boolean appreciation;是否开启赞赏
Boolean copyright;是否开启版权声明
Boolean comment;是否允许评论
User类
String username: 与nickname不同,username是登录名,唯一。
String uuid: 用户的唯一标识,这里主要用来生成用户目录名
String role: 用户的角色,没有做权限管理,所以这个字段用处不大
String avatar: 用户的头像
String introduce: 用户介绍,也将是前台展示的关于我信息
因为关联关系的存在,实体类中的字段在开发中不止这些属性。会有一些字段用来维护关联关系,比如Blog类中会存在一个Category属性。
数据表设计
有了实体类,数据表的设计也非常的清晰,每个实体类应该对应一个数据表。
t_blog表
category_id:用来维护文章与分类的一对多关系
user_id:用来关联文章作者的数据,这个其实可以省略,因为网站的user就一个
t_blog_tag表:用来维护文章与标签的多对多关系
表与表之间的关系可以使用外键来约束,也可以在业务层进行维护,这里就不使用外键了。
update_time 字段还可以设置为根据当前时间戳进行更新,这样在业务层修改了数据,可以不用自己设置更新时间。
项目构建
直接用Srping Initializer快速生成我们的项目结构,选择的模块有:
Spring Web:Web模块
DevTools:热部署
Lombok:可以帮我们自动生成getter&setter方法等
Thymeleaf:模板引擎
MySQL Driver:mysql驱动包
还有持久层的框架,我这里使用Mybatis-plus,需要自己引入
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.2.0</version>
</dependency>
AOP模块: 这个现在也需要自己引入
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
这样,我们项目的准备工作大致是完成了