劉子凡 郭昱君



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