摘 要: 針對目前使用Hibernate技術來實現數據持久層存在繁瑣的映射文件配置、不靈活的數據訪問等問題,提出一種基于Spring JDBC來實現數據持久層的方案,并結合實際應用系統的開發,詳細論述了其具體實施過程。實際開發證明,該方案是切實可行的,它不僅避免了映射文件配置,而且能簡單快捷、靈活高效地完成數據持久層任務,并能與上下層次有機融合,較好地滿足了多層Web應用系統的需求。
關鍵詞: 數據持久層; Spring JDBC; Hibernate技術; 映射文件配置; 多層Web
中圖分類號: TN911?34 文獻標識碼: A 文章編號: 1004?373X(2016)14?0084?03
A simple solution for data persistence layer
LIANG Bi
(College of Computer, Sichuan University of Arts and Science, Dazhou 635000, China)
Abstract: In view of the problems existing in the data persistence layer that is implemented by Hibernate technology, such as cumbersome configuration of mapping file and inflexible data access, a simple solution based on Spring JDBC to realize data persistence layer is proposed in this paper. The process of its implementation is discussed in detail by combining with the development of practical application system. The actual development proves that the solution is feasible. It can avoid the configuration of mapping file, and it is also simple, fast, flexible and efficient to complete data persistence layer tasks. In addition, it can integrate with upper layer and lower layer, and can better meet the need of multi?layer Web application system.
Keywords: data persistence layer; Spring JDBC; Hibernate technology; mapping file configuration; multi?layer Web
0 引 言
數據持久層是經典Web應用程序三層架構中非常重要的一層,它用來解決面向對象應用程序向關系數據庫存儲數據時數據類型不一致的問題,即ORIM (Object Relation Impedance Mismatch)問題[1]。其基本的解決方法是使用ORM(Object Relation Mapping)思想,該思想注重利用元數據將數據在對象與關系之間來回映射,從而確保數據訪問代碼不直接侵入域對象類。目前已經有許多ORM 框架技術,如iBATIS,Hibernate及JPA等,并且Hibernate以其輕量級、純粹的面向對象編程理念等優勢成為目前主流的持久化實現工具[2]。
然而,由于Hibernate對JDBC封裝得過于完整,導致開發人員無法靈活使用JDBC的原生SQL,所以其沒有JDBC直接訪問關系數據庫效率高;同時Hibernate遵循ORM原則,導致映射文件配置過于復雜,當遇到大型項目時映射文件和面向對象代碼是非常龐大且繁瑣,這直接影響到Web系統的性能及維護;而且Hibernate處理批量數據時較弱,對于批量數據的修改和刪除不適合用Hibernate來完成。針對Hibernate這些缺陷,本文提出了一種基于Spring JDBC的數據持久層解決方案,并將其應用于可移動文物管理系統持久層部分。
1 Spring JDBC
Spring是目前流行的輕量級一站式企業應用程序解決方案,它以一種統一的方式對持久化數據訪問提供支持,并將數據持久化中固定格式的代碼封裝為Spring JDBC,因而Spring JDBC本身就是對JDBC輕量封裝,它由Core,Datasource,Object和Support四個不同包組成,其中最重要的是Core包,它提供了核心功能的類,并且JdbcTemplate是該Core包中最重要的類[3]。
JdbcTemplate類通過提供相應的模板和輔助類來完成對數據的CRUD操作,進而解決了傳統JDBC對數據庫的繁瑣操作以及代碼重復的問題;它替開發人員完成了資源的創建以及釋放工作,從而簡化了對JDBC的使用;它還可以幫助開發人員避免一些常見的錯誤,比如忘記關閉數據庫連接等;而且JdbcTemplate將完成JDBC核心處理流程,比如SQL語句的創建、執行,而把SQL語句的生成以及查詢結果的提取工作留給開發人員的應用代碼[4]。它還可以完成SQL查詢、更新以及調用存儲過程,可以對ResultSet進行遍歷并加以提取等。并且,得益于Spring良好的隔離設計,JDBC封裝類庫可以脫離Spring Context獨立使用[5],其架構如圖1所示。
2 簡捷的數據持久層方案研究
2.1 數據持久層方案設計
源于傳統的Web應用程序三層架構,將數據持久層從業務邏輯層分離出來,使其處于業務邏輯層和關系數據庫層之間,這樣持久層相當于“橋梁”角色,然后采用Spring JDBC來實現,其具體方案設計[6]如圖2所示。
由圖2可見,由于業務邏輯層的Java應用程序必須通過JDBC來訪問關系數據庫中的數據,因此持久層本質上實現了對傳統JDBC API的封裝,同時它還實現了數據類型由Java面向對象類型向標準的SQL類型的轉換,進而實現了高質量的對象關系轉換工作,從而有效解決了對象關系阻抗失配問題。而這些任務當前由Spring JDBC來完成。它通過借助JdbcTemplate模板類使開發人員能夠更加專注于數據訪問的具體邏輯,而不會再關注數據資源管理及異常處理等,這不僅簡化了JDBC的使用,且在一定程度上減少了錯誤的發生,同時也使數據持久化操作變得更加簡捷靈活。
2.2 數據持久方案實現
本數據持久層是基于Spring JDBC來實現的,因此需要創建VO值對象及DAO接口,并通過DAO來持久化VO。其中,VO專門用來封裝持久層對象的數據,它通過POJO類來具體實現;DAO則用來抽象和封裝對關系數據庫中數據的訪問操作,并形成統一接口對外提供服務,同時隱藏操作關系數據庫的實現細節,進而有效實現業務邏輯層與數據庫層的松耦合[7]。DAO本身管理著與關系數據庫的連接,內部封裝了JDBC數據操作、事務處理等API。Spring框架為JDBC的DAO提供了JdbcDaoSupport支持類,使用該類能夠更加簡化JDBC操作,因為在JdbcDaoSupport中已經提供了JdbcTemplate的變量,只要自定義類繼承JdbcDaoSupport就可以直接調用JdbcTemplate相關的方法來實現數據的持久化[8]。
在實際開發中,首先需要定義DAO接口,該接口對外提供CRUD操作方法;然后定義DAOImpl實現類,該類需要實現DAO接口并繼承JdbcDaoSupport,通過調用JdbcTemplate相關的方法(如update,mapRow等)來完成對關系數據庫中數據的具體操作任務[9]。業務邏輯層只需調用DAO接口中對外提供的方法,而不需要關心DAO的具體實現細節,這樣有利于Web應用程序在不同的持久層技術之間切換,進而增強了系統開發的靈活性和有效性。ApplicationContext.xml配置文件中除了統一配置數據源及事務之外,還需要配置業務邏輯Bean,數據持久DAOImpl,并通過DI為DAOImpl注入Factory,為業務邏輯Bean注入DAOImpl,這樣有機地完成Web應用程序中各Bean組件的組裝和集成。
3 簡捷的數據持久層方案應用
文物是人類在歷史發展過程中遺留下來的遺物、遺跡,它是人類寶貴的歷史文化遺產[10]。隨著新文物的出土和發現,以及新技術的引進,傳統的文物管理方式已無法滿足當今文物管理的需要,開發一個響應速度快、拓展性強和維護性好的可移動文物管理系統非常必要,通過它來管理已經向外公開的可移動文物,讓更多的人對它們有所了解和認識,進而推進文物的普及工作。為了快捷實現該系統的數據訪問,增強用戶體驗,將所提出的數據持久層方案應用到本系統的持久層部分,具體實施過程如下:
3.1 環境搭建
環境搭建是具體使用某種框架技術最重要的一步,在此過程中根據不同框架技術所完成的具體工作不一樣,但一般都有導入相關的Jar包,創建和配置相關文件,并進行框架的初始化等工作。由于Spring JDBC使用相對簡單,因此在可移動文物管理系統持久層部分的環境搭建中,只需進行相關Jar包的導入即可,如導入spring.jar,commons?logging,commons?dbcp.jar,commons?pool.jar,commons?annotation.jar和jtds?1.2.jar等。
3.2 配置ApplicationContex.xml
ApplicationContex.xml文件是整個可移動文物管理系統的基礎,它所起的作用至關重要,其能將本系統的持久層、業務邏輯層及其他各層有機的融合在一起,并實現對系統中所有Bean的有效管理。ApplicationContex.xml在本系統持久層部分主要完成數據源配置、事務配置及其他一些初始工作,用于保證Spring JDBC正常完成該系統VO的持久化任務,其關鍵配置如下:
3.3 創建VO值對象
一個VO通過一個簡單的Java對象即POJO來實現,一般情況下,一個POJO就表征了與數據表里某條記錄相對應的實體,它由實體的一些屬性及屬性的訪問方法組成,其中除了無意義的主屬性只能被獲取外,每一個屬性都對應著兩個外部對象訪問的方法,即get()和set()。本可移動文物管理系統相關的POJO有User.java,Admin.java,CulturalRelic.java,Picture.java,Video.java,Msg.java和News.java等,其中3.4 創建DAO接口及實現類
根據本文所提出的數據持久層方案,使用DAO設計模式來完成可移動文物管理系統持久層任務。DAO模式的實現包括DAO接口和DAOImpl實現類。其中,DAO接口負責聲明訪問特定POJO所對應的抽象業務邏輯方法,DAOImpl實現類則負責使用Spring JDBC封裝的JdbcTemplate來具體實現DAO接口中聲明的抽象方法,這樣可以減少組件間的耦合度。在本系統中,創建的DAO接口有UserDAO.java,AdminDAO.java,CulturalRelicDAO.java,PictureDAO.java,VideoDAO.java,MsgDAO.java和NewsDAO.java等,然后通過調用JdbcTemplate提供的方法對這些DAO接口進行實現。其中CulturalRelicDAO的實現類CulturalRelicDAOImpl里刪除可移動文物的方法核心代碼如下:
4 結 語
本文使用Spring JDBC來設計和實現了Web應用程序中的數據持久層,并將其應用于可移動文物管理系統持久層部分,解決了目前主流的Hibernate在完成持久層任務時所遇到的一些問題。通過實際應用開發證明,該持久層方案是正確可行的,且具有如下三方面特征:
(1) Spring JDBC通過借助JdbcTemplate可以執行對關系數據的CRUD操作,不僅代碼簡單、容易編寫,而且相對于Hibernate對JDBC全封裝模式更為靈活。
(2) Spring JDBC繼續了以前JDBC的SQL訪問方式,不需要在HQL和SQL之間相互轉換,可以直接操作關系數據庫,進而提高了數據訪問速度,增強了用戶體驗。
(3) 該方案沒有*.hbm.xml映射文件繁瑣配置,避免了運行時產生大量的冗余數據存放于內存,進而提高了系統性能以及系統的開發效率。總的來講,基于Hibernate技術實現Web應用程序中的數據持久層已出現較多問題,而通過Spring JDBC來完成數據持久層任務,具有簡單、快捷、靈活及高效等特性,因此值得進一步推廣使用。
參考文獻
[1] 閆宏印,張衛爭,劉超慧.開源框架下Web應用分層的設計與實現[J].計算機工程與設計,2008,29(23):6023?6025.
[2] 夏斌,李志蜀.基于Hibernate框架的數據持久層的研究及應用[J].計算機應用,2008(9):2446?2448.
[3] Spring Reference Documentation. Introduction to the Spring framework [R]. [S.l.]: Spring Reference Documentation, 2015.
[4] Spring JDBC Reference Documentation. Introduction to the Spring JDBC [EB/OL]. [2013?12?24]. http://docs.spring.io/spring?data/jdbc/docs.
[5] 張俐,張維璽.基于Spring和JDBC的蔬菜運銷管理系統在數據持久層的應用[J].安徽農業科學,2012(7):4401?4403.
[6] 張少應,程傳旭.基于Hibernate持久化層的設計與實現[J].計算機技術與發展,2014(12):101?104.
[7] 劉德山,楊彬彬.基于Hibernate框架的數據持久層架構設計及應用[J].微型機與應用,2011,30(15):12?14.
[8] 高劍,朱程榮.Spring框架在數據持久層的應用研究[J].微機發展,2005,15(11):106?108.
[9] 張俐.基于JavaEE的電信CRM數據持久層的實現[J].計算機工程,2009,35(6):41?43.
[10] 梁弼,劉篤晉,肖麗利.基于五層架構的不可移動文物數字化平臺構建研究[J].計算技術與自動化,2014,33(4):115?118.