基于SpringBoot+Mybatis的个人博客系统设计与实现
2021-11-03刘子凡郭昱君
刘子凡 郭昱君
DOI:10.19850/j.cnki.2096-4706.2021.08.029
摘 要:随着计算机技术的更新发展,信息技术也产生了革命性的变化,信息的传播方式开始向网络化转变,博客网站在此形势下应运而生。然而,现有的第三方博客网站存在各种问题,例如网站的广告多、恶意弹窗等。鉴于此,该文设计了一个小型的个人博客网站,使用的开发语言为Java,采用后端框架SpringBoot、持久层框架Mybatis、前端框架SemanticUI以及模板引擎Thymeleaf。该博客系统具有简洁、轻量化的特点,使人们免去了各种广告、恶意弹窗等烦扰,提供更加方便的博客平台。
关键词:个人博客;SpringBoot;Mybatis;Thymeleaf
中图分类号:TP393.092 文献标识码:A 文章编号:2096-4706(2021)08-0104-05
Design and Implementation of Personal Blog System Based on SpringBoot+Mybatis
LIU Zifan,GUO Yujun
(School of Computer and Software,Jincheng College of Sichuan University,Chengdu 611731,China)
Abstract:With the update and development of computer technology,information technology also has a revolutionary change,the way of information dissemination came to the network,blog website came into being in this situation. However,the existing third-party blog websites have various problems,such as more advertisements,malicious pop ups and so on. In view of this,this paper designs a small personal blog website,using Java as the development language,using the back-end framework SpringBoot,persistence layer framework Mybatis,front-end framework SemanticUI and template engine Thymeleaf. The blog system has the characteristics of simplicity and lightweight,so that people can avoid all kinds of advertisements,malicious pop ups and other annoyances,and provide a more convenient blog platform.
Keywords:personal blog;SpringBoot;Mybatis;Thymeleaf
0 引 言
隨着互联网的快速发展,信息传递的方式也逐渐网络化,博客网站就是一种用来公布个人消息与实现沟通的专业网站,提供基本的沟通和个性化设计[1]功能。然而,过于追求商业化的博客网站却给用户带来了广告、弹窗的烦扰;另外,过于丰富的功能也使网站变得臃肿,操作起来更加烦琐,这无形中为那些追求简洁便利的用户带来莫大的困扰。
1 主要技术介绍
1.1 SpringBoot
SpringBoot是由Pivotal团队设计开发的框架结构,通过简化配置来优化Spring应用的搭建和开发过程。另外,SpringBoot通过集成大量的框架使得依赖包的版本冲突,以及应用的不稳定性问题得到很好的解决[2]。
1.2 Mybatis
Mybatis与Hibernate是Java中最常用的两种ORM框架,其中Hibernate在处理多表关联时可能会出现N+1问题,性能会受到很大影响。若要解决性能受影响的问题,需要使用者具备深厚的Hibernate知识基础和丰富的项目经验[3]。所以本系统中采用了Mybatis,自己编写SQL语句,以便具有一定的可控性,并通过简单的XML或特定注解将Java中的普通对象映射为数据库里的记录。
1.3 Thymeleaf
Thymeleaf是服务于Java的一个模板引擎,能够处理HTML、JS、XML等,并且不会影响Java原本的表现,利用Thymeleaf可极大地提高开发速度,同时还能完美地实现页面渲染[4]。
2 总体设计
本个人博客系统采用B/S架构进行设计,分为游客端和管理员端两个子系统,通过SpringBoot下的MVC分层结构来完成整个项目。游客端子系统主要是针对游客在博客网站的操作,游客通过访问博客网站来浏览博客文章,如果访客有特殊需求,则可以通过分类、添加标签等操作进行文章筛选,如果访客对自己所阅读的文章有所感悟或者想予评价,那么可以在文章的底部给出留言和评价。管理员端子系统是针对管理员操作,管理员通过登录自己的账号进入博客的管理系统,在系统里面可以对文章进行增加、删除、修改、更新操作,同时更新数据库里的数据。
2.1 前台功能设计
2.1.1 首页文章的分页功能
游客能够在网站首页中浏览各式各样的博客文章,然而由于文章数量庞大,因此需要有一个分页的功能,游客通过点击按钮的操作可以实现翻页。通过Thymeleaf技术,给标签href赋值来接收后台已经编写好的数据。实现代码为:
;2.1.2 文章分类查询功能
游客可以通过点击分类按钮,根据需要查找筛选自己感兴趣的文章。给type.name赋值为数据库里存放的文章类别名的数据,type.id为文章类别的对应编号,通过文章类别名以及编号来确定该文章的类别,如果点击某个类别,主界面会显示该类别的相关文章信息。实现代码为: th:classappend="${type.id==activeTypeId} ? 'teal'" th:text="${type.name}">java
th:text="${#arrays.length(type.blogs)}">24
2.2 后台功能设计
2.2.1 管理员账号登录功能
管理员输入自己的账号和密码登录后台管理系统,这一功能是通过以Post方式提交from表单来实现的。如果登录失败,会显示账户名称错误或密码错误。通过if条件语句判断管理员的账号user和密码password是否为空、是否对应数据库的信息等。实现代码为:
@PostMapping("/login")
public String login(@RequestParam String username, @RequestParam String password,
HttpSession session, RedirectAttributes attributes){
User user = userService.checkUser(username,password);
if (user != null){
user.setPassword(null);
session.setAttribute("user",user);
return "/admin/index";
}else {
attributes.addFlashAttribute("message","用户名或密码错误");
return "redirect:/admin";
}
};
2.2.2 文章的管理功能
管理员登录后台后,可以对文章进行一系列的操作。对博客文章的新增操作,在前台提交数据后,后台会依次获取文章名字、文章的类型等,再通过blogService.saveBlog()方法去保存博客。实现代码为:
blog.setUser((User) session.getAttribute("user"));
blog.setType(typeService.getType(blog.getType().getId()));
blog.setTypeId(blog.getType().getId());
blog.setUserId(blog.getUser().getId());
int b = blogService.saveBlog(blog);
文章刪除功能的实现是通过调用blogService.deleteBlog()方法,查找文章的编号来删除文章。实现代码为:
blogService.deleteBlog(id);
attributes.addFlashAttribute("message", "删除成功");
管理员上传了文章后想对文章进行更新、修改,以下代码则为文章的修改功能,调用blogService.updateBlog()方法,重新传输修改的数据。
int b = blogService.updateBlog(showBlog);
if(b ==0){
attributes.addFlashAttribute("message", "修改失敗");
}else {
attributes.addFlashAttribute("message", "修改成功");
};
2.2.3 文章的分类功能
管理员登录后台后,可以对文章内容进行分类操作。例如添加文章类型功能的实现是通过type1获取类型名字,添加类型的同时增加数据库里的信息,并判断所添加的类型是否有重复。实现代码为:
Type type1 = typeService.getTypeByName(type.getName());
if (type1 != null) {
attributes.addFlashAttribute("message", "不能添加重复的分类");
return "redirect:/admin/types/input";
}
int t = typeService.updateType(type);
if (t == 0 ) {
attributes.addFlashAttribute("message", "编辑失败");
} else {
attributes.addFlashAttribute("message", "编辑成功");
};
2.3 数据库设计
为保证网站中的数据可以正确显示,需要将不同的数据类型进行分类。对于不同字段值的设计要够精准,以免在填写信息的时候出现数据添加不正确的情况[5]。这时数据库的设计就显得非常重要。本系统设计了多张表格,各个表之间相互关联,数据库按照三范式进行设计。各个表之间相互关联,每张表都存储着用户的数据等,以下为表的具体说明:
(1)管理员表。管理员表主要设计的内容包括管理员账号、管理员密码、账号创建时间等字段,其中id为主键,管理员表如表1所示。
(2)文章信息表。文章信息表主要设计的内容包括上传文章的相关信息,例如文章标题、文章上传时间、文章简介、文章标签等字段,其中字段名文章类型为外键,文章信息表如表2所示。
(3)文章类型表。文章类型表主要设计的内容包括相关文章的类型名、相关文章所对应的类型编号等字段,文章类型表如表3所示。
3 系统的具体功能实现
3.1 博客系统的登录注销功能实现
管理员进行登录操作时,是通过以post方式提交from表单来实现的,提交的数据在LoginController类进行判断。首先针对用户提交的数据通过if语句进行合法性判断,判断其中是否含有非法字符。其次把传入的用户名当作参数调用UserService类的checkUser()方法,如果返回的值为null,就给前端页面返回“账号或密码错误!”;如果用户提交的数据没有问题,系统就将用户的数据通过Dao层的类存储到数据库中。关于账号的注销功能,通过使用session.removeAttribute("user"),对session进行移除就能实现将账号退出登录。当管理员成功登录至后台后,如果想要退出登录,只需点击“注销”按钮即可退出账号并跳转至登录页面。
3.2 文章的增删查改功能实现
对于本后台管理系统,虽然可以在数据库中进行增删查改操作,但是不够方便快捷,所以如何能够快速简便地对文章进行增删查改操作,是本系统的关键所在。本系统将利用Mybatis框架对映射文件进行编写,在根元素
3.3 文章分类功能的实现
文章分类的功能和文章的管理功能类似,都有增加、删除、查找、修改等功能,然而两种功能的不同之处在于,当管理员进行文章的编辑操作时,前端页面会有单独的“添加分类”按钮用于文章分类。点击分类按钮时页面会有弹窗提示分类的名称,且名称是通过数据库本来的数据显示在页面上,在文章上传成功后,页面会有弹窗显示“上传成功!”,游客就可以在该分类栏里找到该文章。在前端通过Thymeleaf的标签 4 测试及结果 项目完成之后,对本个人博客系统进行了功能性测试。 从网址http://localhost:8080/login进入网站,显示登录界面,在界面中输入账号密码,点击登录按钮,登录成功并跳转至后台管理页面,如图1、图2所示。 在搜索框中输入文章标题或分类,点击“搜索”按钮,主界面会显示文章内容相关信息,再点击“编辑”按钮,跳转至相关文章内容,如图3所示。 在页面中点击“新增”按钮,跳转至文章编辑页面,如图4所示,进行一系列编辑后,再点击“发布”按钮,页面会显示“发布成功”。 在页面中点击“删除”按钮,页面弹出弹窗“确定要删除吗?”,点击按钮“是”,页面自动刷新,将不再显示该文章的信息,如图5所示。 在页面中点击“分类”按钮,跳转至文章分类编辑页面,并通过文本框实现对文章类别的添加操作,再点击“新增”按钮,在输入框中输入新增的类别,并点击“提交”按钮,页面会显示“新增成功”,如图6、图7所示。 游客访问前台时,网页上会显示所有文章的信息,并显示“首页”“分类”“关于我”等按钮,点击文章信息,跳转至相关文章内容页面,如图8所示。 5 结 论 综上所述,本文叙述了基于SpringBoot+Mybatis技术的个人博客系统,该系统具有对博客文章的上传、增加、修改、删除等功能。SpringBoot框架的“开箱即用”、无须配置等特点为整个项目的快速开发节省了大量时间,通过一些美化界面的插件以及前端框架Semantic UI对整个页面进行进一步的美化,从而达到个人博客系统的简洁、美观。 虽然本系统能够正常运行操作,但是站在更高的角度來看还可以做出相应的完善,由于SpringBoot框架的集成度很高,因此开发人员对一些底层代码是不熟悉的,其中比较复杂的函数方法还需要大量、全面地搜集资料,还有其版本更新迭代快,更新后整个模块还需要重新学习。对于本系统而言,需要完善的地方是尚未实现将系统部署在服务器上,游客的访问只能从本地IP登录,具体功能方面就是游客对博客进行评论、打赏的功能并未实现,在以后的学习中,还需要积累知识,融会贯通,不断地改进和完善项目。 参考文献: [1] 余思源,张伟.基于JAVA的个人博客系统的设计与实现 [J].电脑知识与技术,2018,14(17):135-137. [2] 邓笑.基于Spring Boot的校园轻博客系统的设计与实现 [D].武汉:华中科技大学,2018. [3] 陈玲,夏汛.利用Mybatis的动态SQL实现物理分页 [J].数字技术与应用,2011(11):227. [4] 唐炜.Spring Data、MongoDB、Thymeleaf的数据持久化方案及分页技术实现 [J].陇东学院学报,2017,28(5):9-13. [5] 陈秋玲.基于JavaWeb的图书购物网站的设计与实现 [J].电脑知识与技术,2019,15(16):36-38. 作者简介:刘子凡(1999—),男,汉族,四川绵阳人,本科在读,研究方向:软件工程;郭昱君(1994—),女,汉族,山西太原人,硕士研究生,研究方向:管理学。 收稿日期:2021-03-14