基于SSH框架的JavaEE项目代码生成工具的研究与实现
2018-01-11朱海明
朱海明
摘要:本文分析了基于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