APP下载

基于SpringBoot+Mybatis的个人博客系统设计与实现

2021-11-03刘子凡郭昱君

现代信息科技 2021年8期

刘子凡 郭昱君

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框架对映射文件进行编写,在根元素下创建各种子元素。对于增加、删除、查找、修改文章的功能,分别使用