劉子凡 郭昱君
DOI:10.19850/j.cnki.2096-4706.2021.08.029
摘? 要:隨著計(jì)算機(jī)技術(shù)的更新發(fā)展,信息技術(shù)也產(chǎn)生了革命性的變化,信息的傳播方式開始向網(wǎng)絡(luò)化轉(zhuǎn)變,博客網(wǎng)站在此形勢(shì)下應(yīng)運(yùn)而生。然而,現(xiàn)有的第三方博客網(wǎng)站存在各種問題,例如網(wǎng)站的廣告多、惡意彈窗等。鑒于此,該文設(shè)計(jì)了一個(gè)小型的個(gè)人博客網(wǎng)站,使用的開發(fā)語言為Java,采用后端框架SpringBoot、持久層框架Mybatis、前端框架SemanticUI以及模板引擎Thymeleaf。該博客系統(tǒng)具有簡潔、輕量化的特點(diǎn),使人們免去了各種廣告、惡意彈窗等煩擾,提供更加方便的博客平臺(tái)。
關(guān)鍵詞:個(gè)人博客;SpringBoot;Mybatis;Thymeleaf
中圖分類號(hào):TP393.092 ? ? ?文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):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? 引? 言
隨著互聯(lián)網(wǎng)的快速發(fā)展,信息傳遞的方式也逐漸網(wǎng)絡(luò)化,博客網(wǎng)站就是一種用來公布個(gè)人消息與實(shí)現(xiàn)溝通的專業(yè)網(wǎng)站,提供基本的溝通和個(gè)性化設(shè)計(jì)[1]功能。然而,過于追求商業(yè)化的博客網(wǎng)站卻給用戶帶來了廣告、彈窗的煩擾;另外,過于豐富的功能也使網(wǎng)站變得臃腫,操作起來更加煩瑣,這無形中為那些追求簡潔便利的用戶帶來莫大的困擾。
1? 主要技術(shù)介紹
1.1? SpringBoot
SpringBoot是由Pivotal團(tuán)隊(duì)設(shè)計(jì)開發(fā)的框架結(jié)構(gòu),通過簡化配置來優(yōu)化Spring應(yīng)用的搭建和開發(fā)過程。另外,SpringBoot通過集成大量的框架使得依賴包的版本沖突,以及應(yīng)用的不穩(wěn)定性問題得到很好的解決[2]。
1.2? Mybatis
Mybatis與Hibernate是Java中最常用的兩種ORM框架,其中Hibernate在處理多表關(guān)聯(lián)時(shí)可能會(huì)出現(xiàn)N+1問題,性能會(huì)受到很大影響。若要解決性能受影響的問題,需要使用者具備深厚的Hibernate知識(shí)基礎(chǔ)和豐富的項(xiàng)目經(jīng)驗(yàn)[3]。所以本系統(tǒng)中采用了Mybatis,自己編寫SQL語句,以便具有一定的可控性,并通過簡單的XML或特定注解將Java中的普通對(duì)象映射為數(shù)據(jù)庫里的記錄。
1.3? Thymeleaf
Thymeleaf是服務(wù)于Java的一個(gè)模板引擎,能夠處理HTML、JS、XML等,并且不會(huì)影響Java原本的表現(xiàn),利用Thymeleaf可極大地提高開發(fā)速度,同時(shí)還能完美地實(shí)現(xiàn)頁面渲染[4]。
2? 總體設(shè)計(jì)
本個(gè)人博客系統(tǒng)采用B/S架構(gòu)進(jìn)行設(shè)計(jì),分為游客端和管理員端兩個(gè)子系統(tǒng),通過SpringBoot下的MVC分層結(jié)構(gòu)來完成整個(gè)項(xiàng)目。游客端子系統(tǒng)主要是針對(duì)游客在博客網(wǎng)站的操作,游客通過訪問博客網(wǎng)站來瀏覽博客文章,如果訪客有特殊需求,則可以通過分類、添加標(biāo)簽等操作進(jìn)行文章篩選,如果訪客對(duì)自己所閱讀的文章有所感悟或者想予評(píng)價(jià),那么可以在文章的底部給出留言和評(píng)價(jià)。管理員端子系統(tǒng)是針對(duì)管理員操作,管理員通過登錄自己的賬號(hào)進(jìn)入博客的管理系統(tǒng),在系統(tǒng)里面可以對(duì)文章進(jìn)行增加、刪除、修改、更新操作,同時(shí)更新數(shù)據(jù)庫里的數(shù)據(jù)。
2.1? 前臺(tái)功能設(shè)計(jì)
2.1.1? 首頁文章的分頁功能
游客能夠在網(wǎng)站首頁中瀏覽各式各樣的博客文章,然而由于文章數(shù)量龐大,因此需要有一個(gè)分頁的功能,游客通過點(diǎn)擊按鈕的操作可以實(shí)現(xiàn)翻頁。通過Thymeleaf技術(shù),給標(biāo)簽href賦值來接收后臺(tái)已經(jīng)編寫好的數(shù)據(jù)。實(shí)現(xiàn)代碼為:
;2.1.2? 文章分類查詢功能
游客可以通過點(diǎn)擊分類按鈕,根據(jù)需要查找篩選自己感興趣的文章。給type.name賦值為數(shù)據(jù)庫里存放的文章類別名的數(shù)據(jù),type.id為文章類別的對(duì)應(yīng)編號(hào),通過文章類別名以及編號(hào)來確定該文章的類別,如果點(diǎn)擊某個(gè)類別,主界面會(huì)顯示該類別的相關(guān)文章信息。實(shí)現(xiàn)代碼為: th:classappend="${type.id==activeTypeId} ? 'teal'" th:text="${type.name}">java
th:text="${#arrays.length(type.blogs)}">24
2.2? 后臺(tái)功能設(shè)計(jì)
2.2.1? 管理員賬號(hào)登錄功能
管理員輸入自己的賬號(hào)和密碼登錄后臺(tái)管理系統(tǒng),這一功能是通過以Post方式提交from表單來實(shí)現(xiàn)的。如果登錄失敗,會(huì)顯示賬戶名稱錯(cuò)誤或密碼錯(cuò)誤。通過if條件語句判斷管理員的賬號(hào)user和密碼password是否為空、是否對(duì)應(yīng)數(shù)據(jù)庫的信息等。實(shí)現(xiàn)代碼為:
@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","用戶名或密碼錯(cuò)誤");
return "redirect:/admin";
}
};
2.2.2? 文章的管理功能
管理員登錄后臺(tái)后,可以對(duì)文章進(jìn)行一系列的操作。對(duì)博客文章的新增操作,在前臺(tái)提交數(shù)據(jù)后,后臺(tái)會(huì)依次獲取文章名字、文章的類型等,再通過blogService.saveBlog()方法去保存博客。實(shí)現(xiàn)代碼為:
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);
文章刪除功能的實(shí)現(xiàn)是通過調(diào)用blogService.deleteBlog()方法,查找文章的編號(hào)來刪除文章。實(shí)現(xiàn)代碼為:
blogService.deleteBlog(id);
attributes.addFlashAttribute("message", "刪除成功");
管理員上傳了文章后想對(duì)文章進(jìn)行更新、修改,以下代碼則為文章的修改功能,調(diào)用blogService.updateBlog()方法,重新傳輸修改的數(shù)據(jù)。
int b = blogService.updateBlog(showBlog);
if(b ==0){
attributes.addFlashAttribute("message", "修改失敗");
}else {
attributes.addFlashAttribute("message", "修改成功");
};
2.2.3? 文章的分類功能
管理員登錄后臺(tái)后,可以對(duì)文章內(nèi)容進(jìn)行分類操作。例如添加文章類型功能的實(shí)現(xiàn)是通過type1獲取類型名字,添加類型的同時(shí)增加數(shù)據(jù)庫里的信息,并判斷所添加的類型是否有重復(fù)。實(shí)現(xiàn)代碼為:
Type type1 = typeService.getTypeByName(type.getName());
if (type1 != null) {
attributes.addFlashAttribute("message", "不能添加重復(fù)的分類");
return "redirect:/admin/types/input";
}
int t = typeService.updateType(type);
if (t == 0 ) {
attributes.addFlashAttribute("message", "編輯失敗");
} else {
attributes.addFlashAttribute("message", "編輯成功");
};
2.3? 數(shù)據(jù)庫設(shè)計(jì)
為保證網(wǎng)站中的數(shù)據(jù)可以正確顯示,需要將不同的數(shù)據(jù)類型進(jìn)行分類。對(duì)于不同字段值的設(shè)計(jì)要夠精準(zhǔn),以免在填寫信息的時(shí)候出現(xiàn)數(shù)據(jù)添加不正確的情況[5]。這時(shí)數(shù)據(jù)庫的設(shè)計(jì)就顯得非常重要。本系統(tǒng)設(shè)計(jì)了多張表格,各個(gè)表之間相互關(guān)聯(lián),數(shù)據(jù)庫按照三范式進(jìn)行設(shè)計(jì)。各個(gè)表之間相互關(guān)聯(lián),每張表都存儲(chǔ)著用戶的數(shù)據(jù)等,以下為表的具體說明:
(1)管理員表。管理員表主要設(shè)計(jì)的內(nèi)容包括管理員賬號(hào)、管理員密碼、賬號(hào)創(chuàng)建時(shí)間等字段,其中id為主鍵,管理員表如表1所示。
(2)文章信息表。文章信息表主要設(shè)計(jì)的內(nèi)容包括上傳文章的相關(guān)信息,例如文章標(biāo)題、文章上傳時(shí)間、文章簡介、文章標(biāo)簽等字段,其中字段名文章類型為外鍵,文章信息表如表2所示。
(3)文章類型表。文章類型表主要設(shè)計(jì)的內(nèi)容包括相關(guān)文章的類型名、相關(guān)文章所對(duì)應(yīng)的類型編號(hào)等字段,文章類型表如表3所示。
3? 系統(tǒng)的具體功能實(shí)現(xiàn)
3.1? 博客系統(tǒng)的登錄注銷功能實(shí)現(xiàn)
管理員進(jìn)行登錄操作時(shí),是通過以post方式提交from表單來實(shí)現(xiàn)的,提交的數(shù)據(jù)在LoginController類進(jìn)行判斷。首先針對(duì)用戶提交的數(shù)據(jù)通過if語句進(jìn)行合法性判斷,判斷其中是否含有非法字符。其次把傳入的用戶名當(dāng)作參數(shù)調(diào)用UserService類的checkUser()方法,如果返回的值為null,就給前端頁面返回“賬號(hào)或密碼錯(cuò)誤!”;如果用戶提交的數(shù)據(jù)沒有問題,系統(tǒng)就將用戶的數(shù)據(jù)通過Dao層的類存儲(chǔ)到數(shù)據(jù)庫中。關(guān)于賬號(hào)的注銷功能,通過使用session.removeAttribute("user"),對(duì)session進(jìn)行移除就能實(shí)現(xiàn)將賬號(hào)退出登錄。當(dāng)管理員成功登錄至后臺(tái)后,如果想要退出登錄,只需點(diǎn)擊“注銷”按鈕即可退出賬號(hào)并跳轉(zhuǎn)至登錄頁面。
3.2? 文章的增刪查改功能實(shí)現(xiàn)
對(duì)于本后臺(tái)管理系統(tǒng),雖然可以在數(shù)據(jù)庫中進(jìn)行增刪查改操作,但是不夠方便快捷,所以如何能夠快速簡便地對(duì)文章進(jìn)行增刪查改操作,是本系統(tǒng)的關(guān)鍵所在。本系統(tǒng)將利用Mybatis框架對(duì)映射文件進(jìn)行編寫,在根元素
3.3? 文章分類功能的實(shí)現(xiàn)
文章分類的功能和文章的管理功能類似,都有增加、刪除、查找、修改等功能,然而兩種功能的不同之處在于,當(dāng)管理員進(jìn)行文章的編輯操作時(shí),前端頁面會(huì)有單獨(dú)的“添加分類”按鈕用于文章分類。點(diǎn)擊分類按鈕時(shí)頁面會(huì)有彈窗提示分類的名稱,且名稱是通過數(shù)據(jù)庫本來的數(shù)據(jù)顯示在頁面上,在文章上傳成功后,頁面會(huì)有彈窗顯示“上傳成功!”,游客就可以在該分類欄里找到該文章。在前端通過Thymeleaf的標(biāo)簽 4? 測(cè)試及結(jié)果 項(xiàng)目完成之后,對(duì)本個(gè)人博客系統(tǒng)進(jìn)行了功能性測(cè)試。 從網(wǎng)址http://localhost:8080/login進(jìn)入網(wǎng)站,顯示登錄界面,在界面中輸入賬號(hào)密碼,點(diǎn)擊登錄按鈕,登錄成功并跳轉(zhuǎn)至后臺(tái)管理頁面,如圖1、圖2所示。 在搜索框中輸入文章標(biāo)題或分類,點(diǎn)擊“搜索”按鈕,主界面會(huì)顯示文章內(nèi)容相關(guān)信息,再點(diǎn)擊“編輯”按鈕,跳轉(zhuǎn)至相關(guān)文章內(nèi)容,如圖3所示。 在頁面中點(diǎn)擊“新增”按鈕,跳轉(zhuǎn)至文章編輯頁面,如圖4所示,進(jìn)行一系列編輯后,再點(diǎn)擊“發(fā)布”按鈕,頁面會(huì)顯示“發(fā)布成功”。 在頁面中點(diǎn)擊“刪除”按鈕,頁面彈出彈窗“確定要?jiǎng)h除嗎?”,點(diǎn)擊按鈕“是”,頁面自動(dòng)刷新,將不再顯示該文章的信息,如圖5所示。 在頁面中點(diǎn)擊“分類”按鈕,跳轉(zhuǎn)至文章分類編輯頁面,并通過文本框?qū)崿F(xiàn)對(duì)文章類別的添加操作,再點(diǎn)擊“新增”按鈕,在輸入框中輸入新增的類別,并點(diǎn)擊“提交”按鈕,頁面會(huì)顯示“新增成功”,如圖6、圖7所示。 游客訪問前臺(tái)時(shí),網(wǎng)頁上會(huì)顯示所有文章的信息,并顯示“首頁”“分類”“關(guān)于我”等按鈕,點(diǎn)擊文章信息,跳轉(zhuǎn)至相關(guān)文章內(nèi)容頁面,如圖8所示。 5? 結(jié)? 論 綜上所述,本文敘述了基于SpringBoot+Mybatis技術(shù)的個(gè)人博客系統(tǒng),該系統(tǒng)具有對(duì)博客文章的上傳、增加、修改、刪除等功能。SpringBoot框架的“開箱即用”、無須配置等特點(diǎn)為整個(gè)項(xiàng)目的快速開發(fā)節(jié)省了大量時(shí)間,通過一些美化界面的插件以及前端框架Semantic UI對(duì)整個(gè)頁面進(jìn)行進(jìn)一步的美化,從而達(dá)到個(gè)人博客系統(tǒng)的簡潔、美觀。 雖然本系統(tǒng)能夠正常運(yùn)行操作,但是站在更高的角度來看還可以做出相應(yīng)的完善,由于SpringBoot框架的集成度很高,因此開發(fā)人員對(duì)一些底層代碼是不熟悉的,其中比較復(fù)雜的函數(shù)方法還需要大量、全面地搜集資料,還有其版本更新迭代快,更新后整個(gè)模塊還需要重新學(xué)習(xí)。對(duì)于本系統(tǒng)而言,需要完善的地方是尚未實(shí)現(xiàn)將系統(tǒng)部署在服務(wù)器上,游客的訪問只能從本地IP登錄,具體功能方面就是游客對(duì)博客進(jìn)行評(píng)論、打賞的功能并未實(shí)現(xiàn),在以后的學(xué)習(xí)中,還需要積累知識(shí),融會(huì)貫通,不斷地改進(jìn)和完善項(xiàng)目。 參考文獻(xiàn): [1] 余思源,張偉.基于JAVA的個(gè)人博客系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) [J].電腦知識(shí)與技術(shù),2018,14(17):135-137. [2] 鄧笑.基于Spring Boot的校園輕博客系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) [D].武漢:華中科技大學(xué),2018. [3] 陳玲,夏汛.利用Mybatis的動(dòng)態(tài)SQL實(shí)現(xiàn)物理分頁 [J].數(shù)字技術(shù)與應(yīng)用,2011(11):227. [4] 唐煒.Spring Data、MongoDB、Thymeleaf的數(shù)據(jù)持久化方案及分頁技術(shù)實(shí)現(xiàn) [J].隴東學(xué)院學(xué)報(bào),2017,28(5):9-13. [5] 陳秋玲.基于JavaWeb的圖書購物網(wǎng)站的設(shè)計(jì)與實(shí)現(xiàn) [J].電腦知識(shí)與技術(shù),2019,15(16):36-38. 作者簡介:劉子凡(1999—),男,漢族,四川綿陽人,本科在讀,研究方向:軟件工程;郭昱君(1994—),女,漢族,山西太原人,碩士研究生,研究方向:管理學(xué)。 收稿日期:2021-03-14