王龍軍
(成都工業(yè)學院,四川 成都 611730)
后疫情時代圖書館的數字資源顯得比以前更重要,學術交流和學術會議在防控需要的情況下大量減少,這時圖書館數字資源是讀者進行學術交流和學術會議的重要補充,讀者可以利用超星學習通進行在線交流和視頻會議,同時圖書館數字資源也是讀者進行教學和科研的必備資源,因此,開發(fā)圖書館數字資源鏈接管理系統(tǒng)非常重要,筆者重點是關注圖書館購買的第三方數字資源鏈接的管理,像知網、維普、超星、學習通等資源就屬于第三方數字資源,筆者目的是通過該系統(tǒng)能更方便地管理圖書館購置的第三方數字資源鏈接,給讀者提供一個良好的資源服務。
MyBatis是優(yōu)秀的持久層框架[1],MyBatis[2]以前的名字是iBatis,2010年改名為MyBatis,MyBatis是一個基于Java的支持SQL語句查詢的持久層框架,MyBatis解決了JDBC代碼中參數在Java類中手動配置問題和對結果集的手工檢索問題,使用簡單的XML配置或注解進行配置和映射,MyBatis可以使用XML配置文件的方式來創(chuàng)建數據庫連接池,這樣就避免JDBC的數據庫連接池的硬編碼問題。MyBatis用接口和普通Java對象(POJO)映射數據庫中的數據記錄,這樣就可以采用面向對象的編程方法來操作數據庫,與Hibernate不同的是,MyBatis是一個半自動映射的框架,因此,MyBatis需要手動設置POJO、SQL語句和映射關系,而Hibernate是一個全表映射的框架,不需要編寫SQL語句,只需要編寫POJO和映射關系就可以完成持久化操作。MyBatis沒有Hibernate功能那么強大,但是MyBatis簡單小巧,入門簡單,容易上手,節(jié)省開發(fā)成本,MyBatis適合開發(fā)需求變更頻繁的互聯網系統(tǒng),同時MyBatis也是當前主流的ORM框架。
Spring是于2003年興起的一個輕量級Java開源框架,由Rod Johnson在其著作Expert One-On-One J2EE Design and Development中闡述的部分理念和原型衍生而來[3]。Spring框架的核心是“控制反轉(IoC)和面向切面編程(AOP)”,通過使用IoC容器,對象依賴關系的管理被反轉了,轉到IoC容器中來了,對象之間相互依賴關系由IoC容器進行管理[4],控制反轉的目的是在軟件開發(fā)中解耦,提高組件重用的力度;面向切面編程時面向對象編程完善和補充,面向切面編程采用橫向抽取機制,將影響多個類中的公共方法代碼抽取出來,然后封裝到一個可重用的模塊,在程序編譯或運行時將可重用的模塊代碼應用到需要的地方進行執(zhí)行,比如日志、權限驗證等功能都可以方便地用面向切面編程實現。
Spring 3種配置方式為基于XML的配置、基于注解的配置、基于Java類的配置,這3種配置方式推薦使用Java配置,特別是在Spring 3.0以后的版本,包括Spring 4.x和Spring Boot都推薦使用Java配置。
Nginx是一個高性能的反向代理和Http的Web服務器軟件,俄羅斯人Igor Sysoev使用C語言開發(fā)這款軟件,Nginx作為Web服務器一直為其所在的Rambler Media公司提供出色而又穩(wěn)定的服務,后來Igor Sysoev將Nginx代碼開源,并且賦予自由軟件許可證。Nginx是一款輕量級的開源軟件,在BSD-like 協議下發(fā)行。其特點是占有內存少,并發(fā)能力強,具有性能穩(wěn)定、高并發(fā)、低內存耗用、高性能的處理能力等特點,被廣泛應用到國內外各互聯網廠商的實際生產架構中。Nginx 基于事件驅動架構,具有可支持數百萬級別并發(fā)請求的處理能力,其通常被用于技術架構中的訪問入口,國內使用Nginx服務器的大公司很多,比如淘寶、百度、騰訊、網易、京東、新浪等。
Nginx分為開源版和Nginx Plus商業(yè)版,開源版在國內使用比較多,本系統(tǒng)就是用Nginx開源版作為靜態(tài)服務器,Nginx具有很多特性,筆者重點介紹3個特性,內容如下:①靜態(tài)資源的Web服務器。靜態(tài)資源主要是包括Html、CSS、JavaScript等的頁面,簡單來說,就是Nginx不能對數據庫進行讀寫操作,只能對靜態(tài)資源進行解析。②反向代理服務器。指以Nginx服務器來接受客戶端的連接請求,然后將請求轉發(fā)給內部網絡上的Web服務器;并將從服務器上得到的結果返回給請求連接的客戶端,此時Nginx服務器對外就表現為一個服務器。③負載均衡??蛻舳苏埱驨ginx反向代理服務器,反向代理服務器根據一定的策略,將請求分發(fā)到內網不同的多個目標服務器,這樣使得大量并發(fā)訪問被分擔到多個服務器進行并行處理,減少了每臺服務器的并發(fā)壓力,從而減少用戶等待的響應時間。
筆者設計了基于MyBatis與Spring的圖書館數字資源鏈接管理系統(tǒng),該系統(tǒng)采用瀏覽器/服務器(B/S)模式,該系統(tǒng)總體上分為兩部分:系統(tǒng)前臺和系統(tǒng)后臺,系統(tǒng)前臺主要功能是展示數字資源鏈接,系統(tǒng)前臺面向的用戶主要是讀者,讀者通過點擊系統(tǒng)前臺鏈接地址訪問相應的數字資源,系統(tǒng)后臺主要功能是對圖書館數字資源鏈接地址進行增加、修改和刪除等功能,系統(tǒng)后臺面向的用戶是管理員,他們對圖書館數字資源鏈接進行日常管理。圖書館數字資源管理系統(tǒng)總體結構如圖1所示。
圖1 圖書館數字資源管理系統(tǒng)總體結構
圖書館數字資源鏈接管理系統(tǒng)是在CentOS Linux 7.2平臺上開發(fā),通過Docker快速安裝JDK、Tomcat、Nginx、MySQL、Eclipse等軟件,系統(tǒng)采用Nginx服務器處理靜態(tài)頁面,采用Tomcat服務器處理動態(tài)頁面,在Nginx服務器的Webroot目錄下面放置所有的靜態(tài)資源,比如資源鏈接展示程序,在Tomcat服務器的Webroot目錄下面放置動態(tài)請求的程序,動態(tài)請求的程序也是文中重點探討的Spring和MyBatis框架程序,比如資源鏈接增加、修改等程序,數據庫選擇MySQL。當客戶端(一般是Web瀏覽器)訪問本管理系統(tǒng)的時候,如果是靜態(tài)資源的請求,就直接到Nginx服務器的Webroot目錄下面獲取資源,如果是動態(tài)資源的請求,Nginx服務器利用反向代理的原理,把請求轉發(fā)給Tomcat服務器進行處理,這樣就實現了動靜分離,提高了服務器處理請求的性能。
本系統(tǒng)采用DAO模式來完成整個框架的構建,系統(tǒng)中主要采用MyBatis和Spring,其中MyBatis用于持久層,配置操作數據庫的SQL語句,主要完成對圖書館數字資源鏈接的增刪改查等數據表操作,Spring是一個容器和整個應用的工廠,主要用來在持久層整合MyBatis框架,解決了對象之間的耦合問題。本系統(tǒng)難點在于整合Spring和MyBatis,系統(tǒng)實現的具體方法是:讓Spring的IoC容器管理MyBatis的SqlSessionFactory,按照DAO模式編寫接口和接口的實現類,在Spring配置文件中向DAO實現類注入SqlSessionFactory,同時指定數據源,這樣Spring與MyBatis實現了完美整合,通過使用mybatis-spring整合包中的SqlSessionDaoSupport類的getSqlSession()方法創(chuàng)建會話實體類SqlSession,從而實現與數據庫進行各種操作。
系統(tǒng)展示的4個模塊分別是:資源鏈接展示模塊、資源鏈接增加模塊、資源鏈接修改和資源鏈接刪除模塊,模塊功能是通過DAO接口類ResDAO和其實現類ResDAOImpl來完成,系統(tǒng)是采用Kotlin編寫功能代碼,MyBatis通過其映射文件ResMapper.xml來實現資源的持久化類Resource和數據表Resource相關聯,然后通過配置SQL語句實現對資源鏈接的增刪改查操作。映射文件ResMapper.xml部分關鍵代碼如下:
select * from Resource limit 0,10
insert into Resource(name,url) values(#{name},#{url})
update Resource set name = #{name},url = #{url} where id = #{id}
delete from Resource where id = #{id}
MyBatis和Spring整合的關鍵配置如下:
系統(tǒng)中還有很多代碼和技術細節(jié)不能一一展示,通過整合MyBatis和Spring實現圖書館數字資源鏈接系統(tǒng)的各個模塊的功能,系統(tǒng)投入使用后運行穩(wěn)定,讀者使用方便,系統(tǒng)具有良好的實用價值。
本系統(tǒng)在CentOS Linux 7.2平臺上開發(fā),通過Docker快速安裝JDK、Tomcat、Nginx、MySQL、Eclipse等軟件,服務器采用Nginx實現對靜態(tài)頁面和動態(tài)請求頁面進行管理,軟件開發(fā)方面采用MyBatis與Spring框架技術設計了圖書館數字資源鏈接管理系統(tǒng),系統(tǒng)采用DAO模式對MyBatis和Spring進行深度整合,系統(tǒng)在前端實現了展示圖書館數字資源鏈接和查詢資源,在后端實現了對數字資源鏈接進行增加、修改、刪除等功能,系統(tǒng)投入使用后必將進一步提升圖書館的在線業(yè)務水平。