摘 要: 地區級電信FTTH接入區域管理信息系統開發需要簡化數據持久層的操作,提高系統與數據庫的交互效率,利用Hibernate ORM(Object/Relation Mapping)框架技術建立面向對象的域模塊和關系數據庫模型之間的映射是有效的解決手段。Hibernate框架作為連接Java應用程序和關系數據庫的中間件,將Hibernate框架用于開發FTTH接入區域信息管理系統,實際應用結果表明,Hibernate框架方法能夠明顯簡化了數據庫訪問和數據持久化操作,提高了系統開發效率,滿足了業務應用的要求,并且使系統功能結構清晰,后期易于維護和擴展。
關鍵詞: Hibernate; ORM; 數據持久層; 關系映射
中圖分類號: TN919?34; TP311 文獻標識碼: A 文章編號: 1004?373X(2013)16?0056?03
0 引 言
為了更好發展光纖業務和為下一步工作計劃提供信息支持,市場和資源管理部門需要及時了解、共享FTTH接入覆蓋區域的覆蓋信息[1],開發FTTH接入區域MIS 來解決問題。此系統基于B/S模式項目,系統需要與數據庫進行通信交互、CRUD操作。
文獻[2]通過底層的ODBC方式來實現與數據庫進行連接及交互,文獻[3]通過JDBC方式,即能夠執行SQL語句的Java API方式來建立與數據庫進行連接及交互。文獻[4]指出Hibernate在數據庫中持久化業務對象的優秀特點。
地區級電信FTTH接入區域MIS在使用要求上需要靈活的數據庫管理與交互方式,為了簡化與數據庫交互操作,提高開發效率,在上述文獻的基礎上,采用Hibernate框架來創建和維護數據持久層的方法[5?6],由其負責與數據庫交互,結果表明,切實能簡化數據庫訪問操作和提高系統與數據庫交互效率[7?8]。
1 Hibernate介紹
Hibernate是JDBC的輕量級的對象封裝和開放源代碼的對象關系映射框架,連接Java的應用程序和關系數據庫的中間件,負責Java對象的持久化。Hibernate最大的優點就是允許代碼以對象模式來訪問數據庫內容,使得Java開發人員不再用傳統拼寫JDBC SQL語句代碼的方式對數據庫進行CRUD持久化操作,而是使用對象編程思維來操縱數據庫。此外為了提高持久化效率,Hibernate對每一種數據庫都提供對應的方言Dialect,來支持本數據庫提供的一些額外的SQL標準或語法[9?10]。
Hibernate技術本質上是一個提供數據庫服務的中間件。它的架構如圖1所示。
整個系統主要有3層:應用層(Application)、基于Hibernate的數據持久層(Persistent Layer)、數據庫層(Hibernate)。
整個系統是利用數據庫以及配置文件,如hibernate.cfg.xml來為應用程序提供數據持久化服務。通過操作Hibernate配置文件中的值對象和其提供的一些基本類,就可以接入訪問數據庫。
2 Hibernate框架在FTTH接入區域MIS中
的應用
本系統是基于Web的FTTH接入區域信息管理系統。主要能實現后臺資源管理人員對FTTH接入區域信息的收集錄入、信息變更,前臺人員信息查詢等功能模塊。
采用Oracle數據庫,Hibernate作為數據持久層。所有的業務對象都通過Annotation注解和結合hibernate.cfg.xml配置文件將其映射至數據庫的對應表。
在應用Hibernate框架時,首先需要編寫它的配置文件,在此配置文件中增加需要映射處理的Java對象。利用Annotation 對需要持久化的Java對象與關系數據庫數據表之間的映射進行注解,最后編寫業務邏輯類,以實現具體的業務邏輯,并封裝對Hibernate的訪問。
FTTH接入區域信息管理系統中,核心的實體表為T_Ftth_Access_Area,下面以訪問此表為例,簡單介紹一下Hibernate的使用過程。
2.1 Hibernate配置
系統通過加載讀取Hibernate配置文件中的數據庫信息來連接數據庫。Hibemate的配置文件有兩種形式:一種是XML格式的文件,默認名為hibernate.cfg.xml,一種是properties屬性文件,默認文件名是hibernate.properties。
本系統采用XML配置文件的方式進行配置,配置文件主要提供兩方面的重要配置信息,即提供連接數據庫的各種參數信息和提供Hibernate的事務管理對象信息,如產生會話的工廠對象SessionFactory。hibernate.cfg.xml配置如下:
<!—數據庫連接配置信息 ??>
<!?? 指定數據庫所用到的驅動 ??>
name=\"connection.driver_class\">oracle.jdbc.driver.OracleDriver <!?? 指定數據庫鏈接的url,hibernate鏈接的數據庫名 ??> <!?? 指定連接數據庫的用戶名 ??> <!?? 指定連接數據庫的用戶口令 ??> <!?? 指定連接池里的最大連接數 ??> <!?? 指定數據庫方言 ??> <!—類和對應數據庫表映射信息??> 2.2 編寫持久化類及注解持久化類與數據庫表映射 關系 持久化類是數據庫表實體的一種對象反映,是業務層和持久層的數據表示。在Hibernate框架中,持久化類可以使用標準的JavaBean來編寫,類屬性增加標準get、set方法,以便Hibernate持久化對象時讀取和寫操作。 通過持久化類包javax.persistence對實體類進行注解,定義實體類與數據庫表映射關系。 在本系統FtthAccessArea對象中,根據業務實際意義定義相關屬性和方法,FtthAccessArea持久化類及Annotation注解主要代碼如下: /*通過注解定義持久化類與數據庫表映射關系 */ @Entity @Table(name=\"T_Ftth_Access_Area\") public class FtthAccessArea { private int id; private String areaName; private String areaDesc; private String accessType; private String accessResourceCode; private Date createDate; private String staffId; /*定義主鍵ID號產生方式 */ @Id @GeneratedValue public int getId() {return id; } public void setId(int id) {this.id = id; } public String getAreaName() {return areaName; } public void setAreaName(String areaName) {this.areaName = areaName; } ...} 2.3 持久化對象操作 Hibernate首先根據配置文件構建session工廠對象,然后由工廠創建session對象,最后通過session來實現對數據庫的操作,得到Session對象后,可以打開事務,然后從面向對象的角度來操作數據。 下面,以增加FTTH接入區域信息為例來介紹持久化對象的操作過程。 (1)創建session對象: 根據默認的Hibernate配置文件名hibernate.cfg.xml創建工廠對象: SessionFactory sf = new AnnotationConfiguration().configure().buildSessionFactory(); Session session=sf.getCurrentSession(); (2)開啟事務: session.beginTransaction(); (3)創建一個FtthAccessArea對象: FtthAccessArea ftthAccessArea = new FtthAccessArea(); ftthAccessArea.setAreaName(\"Hibernate\"); ftthAccessArea.setAccessType(\"FTTH\"); ... ftthAccessArea.setCreateDate(new Date()); (4)保存創建的對象到session中: session.save(ftthAccessArea); (5)提交事務,保存持久化對象數據至數據庫中: session.getTransaction().commit(); 通過以上步驟即可實現對象數據持久化操作,故采用Hibernate框架在很大程度上簡化系統編程代碼,提高開發效率,避免拼寫SQL語句的煩瑣工作。 3 結 語 Hibernate是一個優秀的Object/Relation Mapping)框架,實現業務實體對象與關系數據庫中二維表的映射。創新點在于利用Hibernate框架理想的實現FTTH接入區域管理信息系統數據持久層模塊功能,充分利用Hibernate技術在數據持久層上的優異功能,結果表明,Hibernate技術顯著簡化系統與數據庫交互操作和數據持久化工作,優化系統編程代碼,提高系統開發效率,為業務對象在關系數據庫中持久化的項目開發提供一定的參考價值。 參考文獻 [1] 楊桂光.基于 EPON 接入的城鄉結合區域寬帶網絡優化方案[D].廣州:華南理工大學,2011. [2] LAPSLEY M, RIPLEY B. ODBC database access [EB/OL]. [2004?11?22]. http://www.codeproject.com. [3] ENDRES M. The preference SQL JDBC driver [EB/OL]. [2012?05?12]. https://www.informatik.uni?augsburg. [4] O'NEIL E J. Object/relational mapping 2008: hibernate and the entity data model (EDM) [C]// Proceedings of the 2008 ACM SIGMOD International Conference on Management of Data. [S.l.]: ACM, 2008: 1351?1356. [5] ELLIOTT J, FOWLER R.Harnessing Hibernate [M].北京:機械工業出版社,2009. [6] 孫衛琴.精通Hibernate:Java對象持久化技術詳解[M].北京:電子工業出版社,2010. [7] 侯志松,余周,鄭煥.Hibernate完全手冊[M].北京:機械工業出版社,2008. [8] 黃佩虹,張冰晶.精通Hibernate?Java數據庫持久層開發核心編程[M].北京:清華大學出版社,2009. [9] 南磊.中小企業OA系統開發詳解第5講:hibernate orm框架[M].北京:機械工業出版社,2011. [10] 陳亞輝,繆勇.Struts2+Spring+Hibernate框架技術與項目實戰[M].北京:清華大學出版社,2012.