朱海明



摘要:本文分析了基于SSH框架的輕量型Java EE項目的特點,實現了由表格驅動的SSH框架代碼生成工具。開發人員設計好數據庫表格結構作為工具的輸入部分,然后由代碼生成工具自動生成SSH項目中的Spring、Struts、Hibernate等配置文件和Java EE項目代碼。該工具能加快應用系統開發效率、快速展現系統原型,生產中具有顯著的現實意義。
關鍵詞:SSH框架;Java EE;代碼生成
中圖分類號:TP311.52 文獻標識碼:A 文章編號:1007-9416(2017)11-0057-02
基于SSH的WEB應用開發過程當中,從設計數據庫物理結構至生成系統原型,存在web.xml、Spring、Struts和Hibernate等大量配置文件,過程繁瑣且容易出錯;另一方面,需要編寫實體類、數據操作接口/類、服務接口/類、視圖類和WEB頁面,工作內容重復、代碼量大、可視化開發工具缺乏,對軟件開發自動化支持不足。
1 基于SSH框架的Java EE項目架構
1.1 JavaEE架構基本理論
根據Java EE應用程序架構[1],Web項目中三層架構(如圖1所示)將整個業務應用劃分為:表示層(Presentation Layer)、業務邏輯層(Business Logic Layer)、數據訪問層(Data Access Layer)三層。數據訪問層負責數據庫訪問,完成數據增刪查改等工作;業務邏輯層負責信息系統的業務邏輯處理,調用數據訪問層接口完成數據持久化;表示層負責用戶界面顯示。
1.2 基于SSH框架的輕量型Java EE項目
基于SSH框架的J2EE Web項目[2](如圖2所示),本文在表示層使用Struts2框架,接收用戶發起的請求信息,向用戶反饋系統處理的結果;數據訪問層使用Hibernate4框架對數據庫的操作進行封裝;業務邏輯層的Bean處理具體的業務邏輯。三層中的Bean均交由Spring4負責管理,由Spring負責管理。值對象(VO)、數據傳輸對象(DTO)、普通Java對象(POJO)根據各層具體需求使用。
1.3 Java EE Web項目應用模塊結構
根據Java EE WEB應用的模塊結構約定[3],發布后的war文件在Java容器目錄下展開后存放WEB-INF目錄,JSP頁面、靜態Web文件以及其他靜態資源(如圖片、Javascript等)。其中WEB-INF目錄下存放web.xml文件、lib和classes目錄。Lib下存放項目引用的jar包,classes目錄存放java源碼編譯后的Java中間字節碼。
Eclipse創建的動態Web項目中,web.xml存放在WebContent\WEB-INF目錄下,引入的庫文件放入Web Content\WEB-INF\lib目錄下,src目錄用來存放源代碼。在引入SSH框架后,各框架的配置文件均放入resource目錄下。Eclipse構建項目時,自動將該目錄下資源與編譯后的.class文件一同放入WEB-INF\class目錄中。
2 基于SSH框架的Java EE代碼生成工具的設計與實現
2.1 代碼生成工具框架
如圖3所示,SSH代碼自動化生成工具[4]包括三大模塊,第一部分是數據表格信息(或數據庫表格元信息)讀取模塊,它負責讀取每一張數據表格元信息(字段名稱、字段類型及長度,是否主鍵,是否可空等約束條件)。第二部分主要負責將表格元信息轉化為接口、類等代碼生成模塊信息。第三部分根據相對應的數據元素信息在前文所述JavaEE Web模塊應用程序文件目錄結構,在對應目錄結構下自動生成相應的JSP頁面、輸出映射的JAVA代碼、以及相應的配置文件。
代碼生成器使用數據庫或自定義的excel表格作為將要生成的代碼生成的數據來源。主要是在已經設計好的數據庫中,或者在設計的excel表格中,讀取相關數據庫、數據庫表格、字段、約束條件等元信息,以此為基礎生成項目各層所需要代碼的信息。其中使用數據庫作為元數據信息元時,可利用JAVA的DatabaseMetaData對象可以獲得數據庫元信息,進而獲得數據庫表格、字段的名稱、屬性以及其約束條件等相關信息。Excel表格作為元數據信息源時使用Apache POI讀取Excel表格,設計格式如表1。
2.2 關鍵流程
代碼生成工具首先讀取自身配置文件ssh.properties,一方面用來確定項目的相關信息(比如開發機構、項目名稱、項目存放路徑等),另一方面用以確定用戶選取的數據源是excel設計表格,還是數據庫表格,根據選擇讀取表格信息(字段名稱、字段注解、字段類型、字段約束),采集到的表格信息均存放入數據庫元信息列表,將各層的代碼生成器加入生成器接口列表,以便循環生成。數據元信息采集完畢后,各層代碼生成器通過映射關系轉換器將所有的對象名稱轉換成為相應層的待生成對象的代碼名稱,與此同時,XML配置生成器將分別生成Hibernate的OR映射文件、Spring的接口中注入管理配置文件和Struts的MVC配置文件。最后,統一調用各個層面的代碼生成器接口生成相應代碼文件,并根據項目配置信息存放于相應位置。
2.3 關鍵代碼實現
// 讀取配置文件,找不到文件則使用設定的默認值
Properties props = getProperties();
// 獲得項目配置信息
ProjectConfiguration pc= ConfigManager.getProjectConfig(props);
// 讀取數據庫表結構信息endprint
Configuration cfg = ConfigManager.getTableMeta(pc);
// 從excel表定義中加載項目實體表數據
List
// 從數據庫表基礎結構轉化為類實體,形成ORM對應關系
List
for( TableMetaData tableMetaData : tableMetaDatas){
EntityClass ec= Converter.table2Class(pc, tableMetaData);
ecs.add(ec);
}
List
// 數據庫定義語言生成器,以便生成數據庫的SQL代碼
cg.add(new DdlCodeGenerator(tableMetaDatas,pc));
// 依次加入Pojo、Dao、Service、Action、Jsp代碼生成器
cg.add(new PojoCodeGenerator(ecs, pc));
cg.add(new DaoCodeGenerator(ecs, pc));
cg.add(new ServiceCodeGenerator(ecs, pc));
cg.add(new ActionCodeGenerator(ecs, pc));
cg.add(new JspCodeGenerator(ecs, pc));
// XML配置生成器
cg.add(new HbmXmlGenerator(tableMetaDatas, ecs, pc));
cg.add(new HibernateXmlGenerator(tableMetaDatas, ecs, pc));
cg.add(new SpringXmlGenerator(ecs, pc));
cg.add(new Struts2XmlGenerator(ecs, pc));
// 日志properties配置
cg.add(new LogPropsGenerator(pc));
// 現有資源文件(圖片、JS、jar包等)生成器(簡單拷貝文件至目標文件夾)
cg.add(new ResourceGenerator(pc));
// eclipse項目工程生成器(將模板信息具化后放到目標工程文件夾)
cg.add(new EclipseProjectGenerator(pc));
// 依次生成各層代碼
for( ICodeGenerator codeGenerator : cg){
codeGenerator.generate();
}
3 結語
本文研究實現的以數據表格驅動的基于SSH框架的Java EE代碼自動化生成工具,簡化了SSH框架的應用,提高了開發生產效率。下一步,我們將深入研究整合相關工具形成可視化配置界面,提高代碼生成器的易用性和便利性。
參考文獻
[1]Kayal D著,張平 等譯.JavaEE 設計模式Spring企業級開發最佳實踐[M].北京:人民郵電出版社,2010:1-4.
[2]基于MVC模式的Java主流框架整合技術研究[J].計算機與數字工程,2009,37(10):91-93.
[3]Jendrock E等著,李鵬等譯.Java EE6權威指南基礎篇(第4版)[M].北京:人民郵電出版社,2012:13-14.
[4]丁亮,許舒人.基于SSH框架的java代碼自動生成[J].計算機系統應用,2014,23(9):72-77.
Abstract:This paper analyzes the characteristics of lightweight Java EE project based on SSH framework, and implements a table driven SSH framework code generation tool. Developers to design a database table structure as input part of the tool, then the code generation tool for the automatic generation of SSH project in Spring, Struts, Hibernate configuration files and Java EE project code, in order to achieve the rapid generation of code, to show the prototype system. This tool improves the efficiency of application development, and has significant practical significance in production.
Key Words:SSH framework;Java EE;code generation