劉義忠 張偉
摘 要:為方便使用者更新產(chǎn)品和服務(wù)信息,減少企業(yè)管理維護(hù)成本,提出一種基于J2EE、微服務(wù)平臺(tái)的售藥機(jī)后臺(tái)管理系統(tǒng)以實(shí)現(xiàn)高效管理和維護(hù)。該系統(tǒng)可滿足APP管理和分布式管理需求。采用前后端分離方式進(jìn)行開(kāi)發(fā),后臺(tái)前端涉及Bootstrap、 thymeleaf模板引擎等框架,后臺(tái)系統(tǒng)開(kāi)發(fā)采用目前最流行的微服務(wù)框架 SpringBoot( SpringBoot、SpringMvc、Mybatis)。實(shí)驗(yàn)結(jié)果表明,基于微服務(wù)框架的開(kāi)發(fā)可提高系統(tǒng)開(kāi)發(fā)效率及適用性,增強(qiáng)系統(tǒng)可維護(hù)性和擴(kuò)展性,減少繁瑣配置,最大化實(shí)現(xiàn)約定大于配置,同時(shí)采用 Mysql數(shù)據(jù)庫(kù)對(duì)數(shù)據(jù)訪問(wèn)更加靈活。
關(guān)鍵詞:后臺(tái)管理;MVC模式;J2EE;SpringBoot;SSM;Mysql數(shù)據(jù)庫(kù)
DOI:10. 11907/rjdk. 181997
中圖分類號(hào):TP319文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1672-7800(2019)002-0068-04
Abstract:In order to facilitate users to update product information or service information to reduce the cost of management and maintenance, a kind of backstage management system for drug selling machines based on J2EE and micro service platform is put forward to manage and maintain high efficiency. The system can meet the needs of APP management and distributed management. The back-end separation is used for development. The front end involves the Bootstrap, thymeleaf template engine and other frameworks, the most popular SpringBoot (SpringBoot, SpringMvc, Mybatis) framework for the background system development. The results show that the development of the micro service framework improves the efficiency and applicability of the system, enhances the maintainability and extensibility of the system, reduces the cumbersome configuration. The maximum implementation is greater than the configuration, and the data access is more flexible by using the Mysql database.
Key Words: background management; MVC Mode; J2EE; SpringBoot; SSM; Mysql Database
0 引言
互聯(lián)網(wǎng)時(shí)代新興技術(shù)發(fā)展日新月異,其中Web技術(shù) [1]被寄予厚望,眾多研究人員致力于用機(jī)器取代人類進(jìn)行工作。目前國(guó)內(nèi)已有將自動(dòng)售賣(mài)機(jī)放置在地鐵站、大型商場(chǎng)等人流量多的地方,方便人們隨時(shí)購(gòu)買(mǎi)飲料,專業(yè)人員可通過(guò)便捷的管理方式管理后臺(tái)[2]。但自動(dòng)售藥機(jī)后臺(tái)管理系統(tǒng)普遍存在管理功能弱、系統(tǒng)維護(hù)更新難等缺陷,并且在醫(yī)療購(gòu)藥方面存在很多需要改進(jìn)的地方,如藥品價(jià)格過(guò)于高昂,藥效低于實(shí)際效果等,為了加強(qiáng)業(yè)務(wù)管理能力,充分合理利用資源可配置化,使價(jià)格更加透明、藥效更加明顯,本文設(shè)計(jì)了一款基于微服務(wù)框架的自動(dòng)售藥機(jī)后臺(tái)管理系統(tǒng),以提高對(duì)藥品的監(jiān)督和管理,規(guī)范線上、線下藥品價(jià)格,使系統(tǒng)易于維護(hù),提高開(kāi)發(fā)效率。
J2EE[3]是JAVA平臺(tái)企業(yè)版(Java Platform,Enterprise Edition)的英文縮寫(xiě),主要指由 SUN公司開(kāi)發(fā)的一套企業(yè)接口API[4]應(yīng)用規(guī)范,其核心是一組軟件技術(shù)典范和接口應(yīng)用,幫助實(shí)現(xiàn)程序的開(kāi)發(fā)和部署,提高可移植性、健壯性的服務(wù)端應(yīng)用程序。在系統(tǒng)架構(gòu)上,JAVA企業(yè)版本采用MVC設(shè)計(jì)模式,分層設(shè)計(jì)結(jié)構(gòu)清晰,前后端數(shù)據(jù)交互分離,降低各個(gè)組件間的耦合性,提高開(kāi)發(fā)效率。MVC[5]是J2EE核心思想,包括主流的三大組件view層、model層、controller層,分別為表現(xiàn)層組件、控制器層組件、業(yè)務(wù)邏輯層組件。該系統(tǒng)采用的是當(dāng)今最流行的 SSM[6-10]框架(SpringBoot、 SpringMvc和 Mybatis),相對(duì)于最原始的 JDBC、 servlet、 Mysql開(kāi)發(fā),該框架代碼冗余性大大減少,而相對(duì)于比較流行的 SSH[11-14](Struts2、 Spring5.0和 Hibernate4.0)框架設(shè)計(jì)更清晰,便于管理與維護(hù),開(kāi)發(fā)效率更高,最大的區(qū)別是微服務(wù) SpringBoot的使用極大簡(jiǎn)化了繁瑣配置。SpringBoot的controller層負(fù)責(zé)接收來(lái)自View層(視圖層)的請(qǐng)求轉(zhuǎn)發(fā),Service層實(shí)現(xiàn)類實(shí)現(xiàn)業(yè)務(wù)邏輯model層管理;Mybatis[15]作為數(shù)據(jù)庫(kù)[16]交互引擎對(duì)象,與Dao層緊密聯(lián)系,對(duì)數(shù)據(jù)庫(kù)實(shí)現(xiàn)增刪改查的功能。
1 系統(tǒng)介紹
售藥機(jī)后臺(tái)管理系統(tǒng)主要有八大管理模塊:售藥機(jī)列表、庫(kù)存管理、業(yè)務(wù)員管理、溫濕度管理、品類列表、醫(yī)生管理、訂單管理、賬號(hào)管理。其基本功能主要涉及到對(duì)各個(gè)模塊信息的增加、更改、查詢、刪除等基本操作:對(duì)售藥機(jī)詳情模塊信息城市區(qū)域的增加、查詢;實(shí)現(xiàn)對(duì)庫(kù)存管理模塊的庫(kù)存變更和庫(kù)存列表藥品的查詢功能;設(shè)備管理實(shí)現(xiàn)業(yè)務(wù)員管理模塊的密碼管理、補(bǔ)貨記錄、開(kāi)鎖記錄、售藥機(jī)關(guān)聯(lián)的藥品查詢、添加、刪除和更改;業(yè)務(wù)員根據(jù)設(shè)備ID管理售藥機(jī)所處區(qū)域。對(duì)售藥機(jī)溫濕度管理實(shí)施監(jiān)控,設(shè)置設(shè)備溫度參數(shù)對(duì)其進(jìn)行添加、刪除、修改操作;訂單管理模塊主要是歷史訂單的篩選和購(gòu)買(mǎi)者的交易記錄;賬號(hào)管理主要添加管理人員的權(quán)限設(shè)置和刪除等功能;品類列表根據(jù)藥品和疾病分類做出相應(yīng)查詢、刪除、過(guò)濾功能。
從主要功能進(jìn)一步劃分,售藥機(jī)列表主要是售藥機(jī)詳情、線上商品、線下商品、聲音管理、通知人模塊等操作選項(xiàng),業(yè)務(wù)員可以通過(guò)省級(jí)聯(lián)動(dòng)查詢售藥機(jī)所在區(qū)域,創(chuàng)建售藥機(jī)方可插入售藥機(jī)具體信息;通過(guò)查看售藥機(jī)詳情可獲取售藥機(jī)基礎(chǔ)信息并監(jiān)視其運(yùn)行情況。通過(guò)售藥機(jī)名稱和是否有貨查詢售藥機(jī)藥品庫(kù)存信息,主要包含庫(kù)存數(shù)量、庫(kù)存種類、售藥機(jī)地址;通過(guò)庫(kù)存查詢每臺(tái)售藥機(jī)庫(kù)存藥品的具體信息,庫(kù)存變更信息主要指業(yè)務(wù)員對(duì)售藥機(jī)藥品的具體操作,包括操作人、補(bǔ)貨與否、庫(kù)存結(jié)余顯示等。業(yè)務(wù)員管理功能主要指業(yè)務(wù)員對(duì)售藥機(jī)的維護(hù)和保養(yǎng),包括在具體時(shí)間段查詢售藥機(jī)的開(kāi)鎖記錄和補(bǔ)貨記錄,同時(shí)業(yè)務(wù)員也需要對(duì)售藥機(jī)詳情進(jìn)行添加、刪除等操作,如圖1所示。
溫濕度管理模塊包括參數(shù)控制和采集記錄,通過(guò)對(duì)售藥機(jī)溫度、濕度的采集設(shè)定具體溫度和濕度預(yù)警范圍,采集記錄實(shí)時(shí)監(jiān)控售藥機(jī)正常運(yùn)行狀態(tài),如圖2所示。
醫(yī)生管理模塊指通過(guò)醫(yī)生管理列表可以展示醫(yī)生具體信息,包括所屬科室、醫(yī)院、職稱、主修專業(yè),對(duì)這些信息進(jìn)行編輯和管理。訂單管理模塊指主要管理購(gòu)買(mǎi)藥品詳情、支付時(shí)間、藥品數(shù)量、是否出貨等字段信息,管理員可通過(guò)Excel導(dǎo)出訂單詳情。賬號(hào)管理模塊指通過(guò)添加用戶姓名、郵箱、密碼、部門(mén)、角色、關(guān)聯(lián)城市字段管理用戶賬號(hào)。
2 系統(tǒng)設(shè)計(jì)
2.1 開(kāi)發(fā)環(huán)境
開(kāi)發(fā)工具:IDEA(自帶Tomcat)或Eclipse;操作系統(tǒng):Windows10 ;數(shù)據(jù)庫(kù)服務(wù)器:Mysql5.7及以上; Web服務(wù)器:Tomcat8.0及以上();JDK版本:JDK1.8及以上;配置:CPU;主頻2.0GHZ以上;內(nèi)存:1024MB以上;硬盤(pán):500G以上。
2.2 相關(guān)技術(shù)
本系統(tǒng)后臺(tái)主要采用 JAVA2 EE企業(yè)級(jí)開(kāi)發(fā)和 SSM( SpringBoot)輕量級(jí)復(fù)合框架的綜合使用,前端采用 bootstrap[17]表格框架、 thymeleaf[18]模板引擎實(shí)現(xiàn)前后臺(tái)數(shù)據(jù)訪問(wèn),數(shù)據(jù)的交互采用 ajax異步請(qǐng)求和返回 restful[19]風(fēng)格的 JSON[20]數(shù)據(jù)格式, SSM框架主要如下:
(1)SpringBoot精簡(jiǎn)微服務(wù)配置框架, SpringBoot是 Spring衍生品,極大簡(jiǎn)化了 Spring繁瑣配置, SpringBoot將 Spring的核心模塊 IOC和 AOP[21]集成在源碼文件中, SpringBoot的啟動(dòng)僅依賴 main函數(shù),部分代碼如下:
簡(jiǎn)單的配置文件使項(xiàng)目更具層次感:包括數(shù)據(jù)庫(kù)配置、服務(wù)器配置、Mybatis掃描文件部分配置,如下所示。
(2)SpringMVC框架。SpringMVC前端控制器DispacherServlet是Spring開(kāi)發(fā)提供的視圖層框架。SpringMVC框架主要充當(dāng)MVC角色,將后臺(tái)業(yè)務(wù)邏輯和視圖界面交互獨(dú)立展現(xiàn)出來(lái),封裝到 model層和控制器中充當(dāng)中間件的作用,這使得它們之間互相解耦,可以相互擴(kuò)展。
(3)Mybatis支持高級(jí)映射數(shù)據(jù)持久層框架。Mybatis框架相對(duì) Hibenate而言,簡(jiǎn)化了配置和 sql語(yǔ)句書(shū)寫(xiě),防止 sql語(yǔ)句注入,避免了幾乎所有 JDBC重復(fù)代碼、手動(dòng)設(shè)置參數(shù)及獲取結(jié)果集,通過(guò)mapper.xml映射文件將結(jié)果進(jìn)行映射,手動(dòng)編寫(xiě) sql更加靈活,將dao層接口和 Java的實(shí)體類對(duì)象映射成數(shù)據(jù)庫(kù)中的記錄,通過(guò) ID匹配查找相應(yīng)方法,其中實(shí)體類通過(guò) Mybatis配置文件映射的駝峰命名規(guī)則配置如下:
,因此其封裝性更好和開(kāi)發(fā)效率更高。
上述部分Springboot配置文件整合了Mybatis框架: Mapper接口映射Dao層,用于整合SpringMVC和Springboot。而 SpringmVC框架是基于 MVC設(shè)計(jì)模型的實(shí)現(xiàn),因?yàn)?SpringBoot的 Application配置注解無(wú)需單獨(dú)配置一個(gè) SpringMVC配置文件,其 Springboot通過(guò)注解@ ServletComponentScan方式完成自動(dòng)掃描控制器、@ MapperScan(”**.**. dao”)完成接口映射、@ SpringBootApplication完成主函數(shù)啟動(dòng)等等。MVC模式如圖3所示。
2.3 分層實(shí)體結(jié)構(gòu)設(shè)計(jì)
根據(jù)產(chǎn)品經(jīng)理提供的 UE[22]需求分析和架構(gòu)設(shè)計(jì),將系統(tǒng)的整體結(jié)構(gòu)大致分為表現(xiàn)層、控制層、 web服務(wù)層、數(shù)據(jù)庫(kù)訪問(wèn)層,具體細(xì)分為 dao層、service層、controller層、domain實(shí)體類、Mysql數(shù)據(jù)庫(kù)層。如圖4所示。
2.4 Mysql數(shù)據(jù)庫(kù)表結(jié)構(gòu)設(shè)計(jì)
根據(jù)售藥機(jī)需求,該系統(tǒng)主要有八大功能模塊,因設(shè)計(jì)的表較多,只顯示主要表結(jié)構(gòu),如圖5所示。
3 系統(tǒng)實(shí)現(xiàn)
在售藥機(jī)后臺(tái)管理系統(tǒng)中共有十幾種功能模塊,大部分主要涉及各個(gè)功能模塊的增刪改查。下文以其中庫(kù)存管理模塊為基礎(chǔ)講述具體實(shí)現(xiàn)過(guò)程:
(1)業(yè)務(wù)邏輯層。數(shù)據(jù)訪問(wèn)采用 DAO(數(shù)據(jù)訪問(wèn)對(duì)象)模式, DAO模式為了減少業(yè)務(wù)邏輯和數(shù)據(jù)訪問(wèn)邏輯之間的耦合,在不修改業(yè)務(wù)對(duì)象的同時(shí)使用持久層框架可以減少對(duì)象與對(duì)象之間、對(duì)象和組件之間、組件與組件之間的耦合度,這樣就只用關(guān)心底層數(shù)據(jù)訪問(wèn)的代碼,提高代碼的可重用行。DAO全稱為Data Access Object,即數(shù)據(jù)訪問(wèn)接口對(duì)象,通過(guò)使用dao層接口可以和底層數(shù)據(jù)庫(kù)之間進(jìn)行數(shù)據(jù)的交互。定義接口類后,在Mybatis的 Mapper配置文件中添加配置,根據(jù)相應(yīng)ID匹配接口中對(duì)應(yīng)方法即可實(shí)現(xiàn)映射。
(2)表現(xiàn)層。通過(guò)調(diào)用前端控制器組件可將 Web網(wǎng)絡(luò) url路由數(shù)據(jù)訪問(wèn)請(qǐng)求(request)轉(zhuǎn)發(fā)(reponse)到注解過(guò)的控制類中映射方法上,實(shí)現(xiàn)系統(tǒng)頁(yè)面間跳轉(zhuǎn),跳轉(zhuǎn)分兩種,分別為直接跳轉(zhuǎn)頁(yè)面和將對(duì)象通過(guò) ResponseBody封裝,以 restful風(fēng)格、 Json格式跳轉(zhuǎn)。SpringMVC通過(guò)處理器映射器管理處理器,利用視圖解析器進(jìn)行視圖管理,采用 bootstrap框架模板進(jìn)行展示,通過(guò) Ajax異步請(qǐng)求實(shí)現(xiàn)效果及渲染,結(jié)合 Jquery庫(kù)實(shí)現(xiàn)頁(yè)面豐富的動(dòng)態(tài)效果。
(3)核心控制層。 負(fù)責(zé)具體業(yè)務(wù)模塊流程控制,主要調(diào)用Service層接口控制具體業(yè)務(wù)流程,控制配置也需要在配置文件中進(jìn)行。通過(guò) submit按鈕提交 Form表單臨時(shí)存儲(chǔ)庫(kù)存表中每個(gè)字段以及包裝對(duì)象信息,因此需要一個(gè)存儲(chǔ)信息的實(shí)體類例如 InventoryDO作為可重用組件(JavaBean[23]),通過(guò) domain層中的各個(gè)字段自定義 Getter方法獲取值和 Setter方法設(shè)置值,便可在控制層參數(shù)列表中直接寫(xiě)該 domain實(shí)體類對(duì)象,Spring容器通過(guò)控制反轉(zhuǎn)自動(dòng)進(jìn)行封裝 Bean。根據(jù)請(qǐng)求url以控制類中的相應(yīng)方法分派請(qǐng)求。通過(guò)@RestController注解注冊(cè)所寫(xiě)的控制類, 利用@RequestMappering注冊(cè)請(qǐng)求的路徑,通過(guò)@ResponseBody封裝返回的數(shù)據(jù)對(duì)象,經(jīng)過(guò)上述處理實(shí)現(xiàn)控制層功能。
(4)數(shù)據(jù)訪問(wèn)層。本系統(tǒng)采用的 Mysql數(shù)據(jù)庫(kù)與dao層進(jìn)行數(shù)據(jù)交互,實(shí)現(xiàn)數(shù)據(jù)增刪改查,在Mybatis源碼中, Mybatis框架首先創(chuàng)建 SQL會(huì)話工廠實(shí)例,其作用相當(dāng)于一個(gè)數(shù)據(jù)庫(kù)連接池,然后 SQL會(huì)話工廠通過(guò)配置的 xml文件獲取一個(gè) SQL會(huì)話。而執(zhí)行 SQL語(yǔ)句所需方法,都包含在 SQL會(huì)話中,所以底層通過(guò)采用 SQL會(huì)話完成對(duì)數(shù)據(jù)庫(kù)的操作,同時(shí)對(duì)事物提交、回滾,用完之后需要釋放數(shù)據(jù)庫(kù)連接和關(guān)閉會(huì)話功能。
4 結(jié)語(yǔ)
針對(duì)當(dāng)前后臺(tái)管理亟待解決的問(wèn)題,通過(guò)對(duì)該系統(tǒng)后臺(tái)的開(kāi)發(fā),提出了基于SpringBoot微服務(wù)框架的后臺(tái)管理系統(tǒng)方案,運(yùn)用該框架提高開(kāi)發(fā)效率增強(qiáng)、減少冗余配置、增強(qiáng)實(shí)用性。相關(guān)人員可以通過(guò)本系統(tǒng)進(jìn)行后臺(tái)的管理,包括售藥機(jī)各個(gè)模塊信息添加、刪除、修改、查詢以及售藥機(jī)維護(hù)。在一般情況下,只需打開(kāi)售藥機(jī)后臺(tái)管理就能了解售藥機(jī)的情況,如需詳細(xì)了解可以通過(guò)手機(jī)APP進(jìn)行買(mǎi)藥、出藥,十分快捷。經(jīng)過(guò)系統(tǒng)的運(yùn)行測(cè)試,預(yù)期效果良好。但是使用該框架還存在很多不足,雖然將很多需要手動(dòng)書(shū)寫(xiě)的代碼集成在配置文件中,但原理上的認(rèn)識(shí)存在缺陷,因此希望后續(xù)開(kāi)發(fā)中能更深層次地理解核心源碼。
參考文獻(xiàn):
[1] FAIN,RA. Enterprise Web development[M]. Sebastopol O,Reily Media,2017.
[2] 劉天真,董彥軍. 高??蒲许?xiàng)目管理系統(tǒng)開(kāi)發(fā)研究[J].中國(guó)高校科技與產(chǎn)業(yè)化, 2009(12): 52-53.
[3] 李剛. 輕量級(jí)J2EE企業(yè)應(yīng)用實(shí)戰(zhàn)[M]. 第4版.北京:電子工業(yè)出版社,2015.
[4] 肖睿,禹晨. java核心API編程[M]. 北京:中國(guó)水利水電出版社,2012.
[5] DECK P. Spring MVC學(xué)習(xí)指南[M]. 林儀明崔毅,譯. 北京:人民郵電出版社,2015.
[6] 王艷清,陳紅. 基于SSM框架的智能Web系統(tǒng)研發(fā)設(shè)計(jì)[J]. 計(jì)算機(jī)工程與設(shè)計(jì),2012, 33(12):4751-4757.
[7] 陳夫真. 基于SSM 的某高校教室管理信息系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].蘇州:蘇州大學(xué),2012.
[8] 張俊萍,朱小冬. 基于SSM的軟件體系結(jié)構(gòu)開(kāi)發(fā)過(guò)程研究[J]. 計(jì)算機(jī)測(cè)量與控制,2011,19(8): 2029-2032.
[9] 任曉鵬,趙文兵,張春平. 基于框架的Web 系統(tǒng)開(kāi)發(fā)研究[J]. 計(jì)算機(jī)工程與設(shè)計(jì), 2010,31(4): 772-773.
[10] 李洋. SSM框架在Web應(yīng)用開(kāi)發(fā)中的設(shè)計(jì)與實(shí)現(xiàn)[J]. 計(jì)算機(jī)技術(shù)與發(fā)展,2016(12):190-194.
[11] 張建勇,胥斌,尚艷英,等. 基于SSH框架的固定資產(chǎn)管理 系統(tǒng)研究與設(shè)計(jì)[J]. 山西煤炭管理干部學(xué)院學(xué)報(bào),2013,26(1): 112-113,116.
[12] 張朋. 基于Struts2+Hibernate+Spring框架整合的xx邊防支隊(duì)資產(chǎn)管理系統(tǒng)的研究與開(kāi)發(fā)[D]. 北京:北京化工大學(xué),2008.
[13] 李勉. 基于SSH框架的企業(yè)固定資產(chǎn)管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D]. 北京:北京郵電大學(xué),2011.
[14] 劉婷婕. 基于SSH框架的固定資產(chǎn)管理系統(tǒng)的設(shè)計(jì)與原型 實(shí)現(xiàn)[D]. 成都:電子科技大學(xué),2011.
[15] 王錢(qián),王蓉,張利. 基于iBatis 的通用數(shù)據(jù)持久層的研究與設(shè)計(jì)[J]. 微計(jì)算機(jī)信息, 2007, 23(4-3): 172-173.
[16] 王威. MySQL 數(shù)據(jù)庫(kù)源代碼分析及存儲(chǔ)引擎的設(shè)計(jì)[D]. 南京: 南京郵電大學(xué), 2012.
[17] 談華宇, 吳昶成, 邱小平. 基于Bootstrap 框架的動(dòng)態(tài)表單設(shè)計(jì)與實(shí)現(xiàn)[J]. 無(wú)線互聯(lián)科技, 2015(3): 99~100.
[18] WALLS C.Spring Boot in Action[M]. America: Manning Publications Company,2008.
[19] 韓陸.Java RESTful Web Service實(shí)戰(zhàn)[M]. 第2版.北京:機(jī)械工業(yè)出版社,2016.
[20] BIBEAULT B,KATZ Y. jQuery in action[M]. New York: Manning Publications Company,2010.
[21] 董源,李培軍,許舒人.基于AOP的數(shù)據(jù)庫(kù)應(yīng)用安全控制的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)系統(tǒng)應(yīng)用, 2015,24(12):74-80.
[22] NORMAN D. The Design of Everyday Things[M]. America:Mit Press,2013.
[23] 高蘭,倪遠(yuǎn)平.采用Java 技術(shù)開(kāi)發(fā)可復(fù)用的Web 表示層構(gòu)件[J]. 計(jì)算機(jī)工程與設(shè)計(jì), 2006, 27(18): 3483-3485.
(責(zé)任編輯:江 艷)