APP下载

Java Bean自动生成系统的设计与实现

2015-11-28杨静

湖北汽车工业学院学报 2015年2期
关键词:代码生成代码实体

杨静

(郧阳师范高等专科学校计算机科学系,湖北十堰442000)

在实际开发过程中,为了加快软件的开发速度,要使用一定数量的框架,一是实现代码的重复使用,二来使具体的项目开发更加方便[1]。用代码生成工具生成代码不仅能够提高开发效率,而且能够保证代码风格一致,提高代码的可读性和可维护性[2],降低软件开发及维护成本。现有的主流代码生成技术采用了基于模板的方法[3],代码生成就是一个专注于解放编码生产力,用程序来编程序[4]。通过代码自动生成系统,将一些重复使用或功能基本相似的模块交由系统自动生成,提高软件质量和开发效率,解决了软件开发中代码重用的问题[5]。

首先,从软件行业的角度来分析,软件公司要在最短的时间内,利用最少的人力物力,开发出满足客户需求的产品,同时最大程度地增加公司的利润;其次,从程序员编码的角度分析[6],软件开发人员的工作量非常大,软件中的大段程序代码基本都是程序员一行一行敲进去的,当然也有一些是复制粘贴的,但还需要进行一些修改、调试,而且容易出错,其效率低下;再者,从测试员的角度来看,工作强度也不小,他们不仅要对程序进行测试,还要对业务逻辑进行测试,同样的问题在这里要测试,换个功能几乎一样的模块也要测试,严重降低了测试效率;最后,从软件维护的角度看,由于有些重复性代码是复制粘贴过来的,导致在维护过程中,一个点出了错误,与该业务逻辑相关的所有地方都要修改,不易维护。针对上述情况,本系统设计了基于Java的代码生成工具,将一些重复的Java Bean代码通过该工具自动生成,需要时进行调用即可。

1 系统设计

Java Bean 主要有实体Bean和业务Bean,实体Bean中的成员变量主要是数据库中表的字段,方法是一些get、set等,业务Bean 主要针对表的增、删、改、查。要想自动生成实体Bean,需要成功读取数据库中表的每个字段,并需要知道每个字段的类型,在Java中,可通过java.sql.Database MetaData中的DatabaseMetaData 获得数据库中元数据,通过java.sql.ResultSetMetaData中的ResultSetMetaData获得表中的数据元素,分别得到表字段名称、字段类型等,然后根据名称和类型,通过字符串的拼接即可生成一个实体Bean;业务Bean 则可以通过得到的表名及表中的每个字段拼接相应的sql 语句,最后由所有拼接的字符串生成。

在代码生成系统中,主要设计了工具包(utils包)、vo包、dao包和impl包,其中utils包中设计AutoTools、DBUtils、TypeTools 3个类,AutoTools类主要包含了生成实体Bean和业务Bean的2个方法,DBUtils类负责实现数据库的连接和关闭,Type-Tools类则包含了一个将数据库字段的类型转换成java类型的方法;vo包中包含了一个Columns类,该类是一个Java Bean,封装了数据库中表的列,实现将数据库表中的列名、类型转化成Java的成员变量和类型;dao包中定义了AutoDao、AutoValueObject、ColumnDao、TableDao 4个类,其中AutoDao 接口中定义了4个抽象方法String insert(String packages,

String tableName)、String list(String packages,String tableName)、String edit(String packages,String table-Name)、String delete(String packages,String table-Name),分别用来实现增、删、改、查的业务逻辑;AutoValuebject 接口中定义了bstract String constructor()和abstract String setProperty()抽象方法,分别用来实现构造函数的生成和get、set方法的生成,即生成实体Bean;ColumnDao 接口中定义了一个List<Columns>list(String tableName)抽象方法,用来获得表的数据类型及表字段的名称,并将数据库中表字段的属性转换成java中类的属性;TableDao接口中定义了一个List<String>list()throws Exception 抽象方法,用来获得数据库中所有表对象。Impl 包主要定义了4个类,分别实现dao中的4个接口。系统结构图如图1所示。

图1 系统结构图

2 自动生成系统的设计与实现

2.1 自动生成系统的设计目标

通过该代码自动生成系统,对配置文件进行简单地修改,可以实现数据库连接,并将数据库中每张表快速转换为相应的实体Bean和业务Bean,环境搭建简洁,配置环境变量简单,为了便于系统进行后期扩展,同时为基于反射的编程提供条件,在业务逻辑层的数据处理类上采用了基于接口的编程[7],当有新的业务或更负责的业务要求时,只需要在接口中添加相应的业务方法,并在实现类中实现该方法,使该系统具有良好的扩展性和可维护性。

2.2 自动生成系统的实现

1)数据库的连接与关闭在实现该模块的时候,其关键是如何读取配置文件。为了让该系统能够根据用户的配置自动地连接该配置的数据库,在实现该模块的时候采用Properties文件来存储访问数据库的用户名、密码、加载驱动的字符串及访问数据库的URL。在utils 包中建一个DBUtils类,在该类中有2个方法,即getConnection()和close(Connection conn)。其关键代码是获得Properties 文件的中内容。

2)实体Bean和业务Bean的实现为了系统具有良好的扩展性,在实现实体Bean和业务Bean时采用接口的方式。在该系统中定义了2个接口即AutoDao和AutoValueObject。其中AutoDao主要是用来定义业务Bean的接口,里面定义了一些业务方法,而AutoValueObject 主要用来定义实体Bean的接口,里面定义了2个方法,分别用来完成构造方法的生成和get、set方法的生成。其实现部分代码如下:

实体Bean在实现时,通过一个类实现AutoValueObject 接口,并重写里面的方法,在重写构造方法时,根据具体情况可以分别生成无参的构造方法和带一个或多个参数的构造方法;业务Bean在实现时,通过一个类实现AutoDao 接口中的所有方法,该接口中的方法主要是一些常用的增删改查的操作。通过接口的实现,当有新的业务需求时,只需在接口中添加相应方法并实现,在应用开发的过程中就可以避免由于业务的增加而修改大量代码,使系统的扩展性更好。

3)工具类的封装有了生成实体Bean和业务Bean的类后,将这2个类进一步封装成一个工具类,即AutoTools类。在该类中主要有2个方法,即

autoDaoImp(List<String>list,String packageName)和valueObject(List<String> list,String package-Name),该方法分别用来生成业务Bean和实体Bean。在需要将数据库中的所有表都生成相应的实体Bean和业务Bean时,只需在配置文件中配置好后,分别调用AutoTools类中的autoDaoImp(List<String> list,String packageName)和valueObject(List<String>list,String packageName)方法就能够很快地生成相应的Java Bean。

使用该系统时,只需要将配置文件中的数据库连接对象改为需要生成Java Bean的数据库名称,重新运行该系统,就可以自动生成相应的代码。

3 结束语

采用分层的设计思想,各个模块可以单独开发,这样不仅可以提高程序的开发效率,同时也有利于程序的移植。因为在采用MVC模式的开发框架中,业务逻辑无论在哪个环境都是不变的,并且其中大多数功能都很相似,此时采用代码自动生成系统,将这些功能相似的模块交由系统自动生成代码,能有效提高程序的开发效率,降低开发成本,提升软件质量。

[1]宋翔宇,曾雅琳.一种新的代码生成器的设计与实现[J].计算机科学,2011,38(7A)∶67-69.

[2]张静,孔芳,杨季文.一个基于Java的代码生成工具的设计与实现[J].微电子学与计算机,2007(6):222-224.

[3]冉春娟,黄华.基于关系数据模型代码生成器的设计与实现[J].湖北大学学报:自然科学版,2010(2):151-156+169.

[4]万军民.基于Java的代码生成器的设计与实现[J].计算机工程,2004(S1):122-124.

[5]陈清,吴海涛,王璐.基于代码自动生成技术的管理信息系统的实现[J].计算机与数字工程,2013(2):268-270+317.

[6]盛刚,韩莉莉.J2EE代码自动生成研究[J].计算机系统应用,2006(8):31-33.

[7]周兵,许俊,吴亚平.中小MIS快速原型构建与自动代码生成[J].计算机技术与发展,2012(5):28-31+36.

猜你喜欢

代码生成代码实体
Lustre语言可信代码生成器研究进展
前海自贸区:金融服务实体
一种基于模型和模板融合的自动代码生成方法
创世代码
创世代码
创世代码
创世代码
实体的可感部分与实体——兼论亚里士多德分析实体的两种模式
基于Web应用界面的代码自动生成软件设计
两会进行时:紧扣实体经济“钉钉子”