一种代码生成方法及装置与流程

文档序号:16665689发布日期:2019-01-18 23:15阅读:161来源:国知局
一种代码生成方法及装置与流程

本发明涉及电子信息技术领域,尤其涉及一种代码生成方法及装置。



背景技术:

传统的代码生成方法主要分为两种,一种是采用可视图形界面的操作方式,通过内置的图形解析模块,将用户利用可视图形界面构造的图形对象转换为代码,完成代码的生成。该方式的好处是能够较快地完成代码的生成,该方法的缺点是代码生成规则无法进行配置,代码生成手段过于单一,所生成代码的灵活性不足。另一种是采用手动编码代码的方式,来完成代码的生成,该方式增加了所生成代码的灵活性和适用范围,但是代码的编写周期长,效率较低。

因此有必要设计一种新的代码生成方法,以提高代码生成效率。



技术实现要素:

本发明的目的在于克服现有技术之缺陷,提供了一种代码生成方法及装置,以实现代码生成的效率。

本发明是这样实现的:

第一方面,本发明提供一种代码生成方法,所述方法包括:

获得界面打开指令,显示数据库连接界面,获得用户通过所述数据库连接界面输入的待连接数据库的连接信息;利用所述连接信息,与所述待连接数据库建立连接;

在成功建立连接后,显示数据表选择界面,获得用户通过所述数据表选择界面输入的表信息,基于所述表信息生成待替换内容,并获得具有目标数据表标识的数据表的结构信息;其中,所述目标数据表标识为所述表信息中的数据表标识;

读取预设的模板代码,将所获得的结构信息填充至所读取的模板代码,用所述待替换内容替换所读取的模板代码中替换标记处的内容,获得已填充结构信息和已替换内容的模板代码,作为目标代码,完成代码的生成,其中,所述模板代码中包括设置有替换标记的通用子代码,所述通用子代码为可被重复利用的子代码,所述替换标记用于标记利用所述通用子代码生成不同代码时的区别部分。

可选的,所述替换标记设置于所述通用子代码的声明部分和初始化部分。

可选的,所述待替换内容包括待替换包名、待替换类名和待替换对象名,所述数据表选择界面包括勾选框和数据表标识文本框,一个数据表标识文本框对应一个勾选框,一个数据表标识文本框用于表征一个数据表标识,

所述获得用户通过所述数据表选择界面输入的表信息,基于表信息生成待替换内容,包括:

在检测到勾选框被选中时,将被选中的勾选框所对应的数据表标识文本框所表征的数据表标识作为表信息;

基于目标数据表标识生成待替换包名、待替换类名和待替换对象名。

可选的,所述待替换内容包括待替换包名、待替换类名和待替换对象名,所述数据表选择界面包括包名输入框、包名确认按钮和数据表选择列表,获得用户通过所述数据表选择界面输入的表信息,基于表信息生成待替换内容,包括:

获得用户通过包名输入框输入的包名,并在检测到包名确认按钮被按下后,将所获得的包名作为待替换包名;

获得用户通过所述数据表选择列表选择的数据表标识,作为目标数据表标识,基于目标数据表标识生成待替换类名和待替换对象名。

可选的,所述目标数据表标识包括字母,所述基于目标数据表标识生成待替换包名、待替换类名和待替换对象名,包括:

依次提取所述目标数据表标识中的字母,若所提取的字母为大写字母,则将该大写字母转换成小写字母;

按照提取顺序,将转换后所得的小写字母以及提取所得的小写字母合并,得到待替换包名;

将待替换包名中处于第一预设位置的字母转换成大写字母,得到待替换类名;

将待替换类名中处于第二预设位置的字母转换成大写字母,得到待替换对象名。

可选的,目标数据表标识包括字母和下划线,所述基于目标数据表标识生成待替换包名、待替换类名和待替换对象名,包括:

依次提取所述目标数据表标识中的字母和下划线,若所提取的字母为大写字母,则将该大写字母转换成小写字母;

按照提取顺序,将转换后所得的小写字母以及提取所得的小写字母合并,得到待替换包名;

将待替换包名中首字母以及处于下划线以后的第一个字母转换成大写字母,得到待替换类名;

将待替换包名中处于下划线以后的第一个字母转换成大写字母,得到待替换对象名。

可选的,替换标记包括包名替换标记、类名替换标记和对象名替换标记,待替换内容包括待替换包名、待替换类名和待替换对象名,

用所述待替换内容替换所读取的模板代码中替换标记处的内容,包括:

用待替换包名来替换所述包名替换标记中的内容,用待替换类名来替换所述类名替换标记中的内容,用待替换对象名来替换所述对象名替换标记中的内容。

可选的,在得到目标代码后,所述方法还包括:

将所述目标代码以文件形式写入磁盘;

判断是否成功写入磁盘;

若成功,则显示用于提示已成功写入磁盘的第一提示信息;

若不成功,则显示用于提示未成功写入磁盘的第二提示信息,并返回执行显示数据表选择界面的步骤。

可选的,在未成功建立连接的情况下,所述方法还包括:

不执行显示数据表选择界面的步骤,并显示用于提示未成功建立连接的第三提示信息。

第二方面,本发明提供一种代码生成装置,所述装置包括:

第一获得模块,用于获得界面打开指令,显示数据库连接界面,获得用户通过所述数据库连接界面输入的待连接数据库的连接信息;利用所述连接信息,与所述待连接数据库建立连接;

第二获得模块,用于在成功建立连接后,显示数据表选择界面,获得用户通过所述数据表选择界面输入的表信息,基于所述表信息生成待替换内容,并获得具有目标数据表标识的数据表的结构信息;其中,所述目标数据表标识为所述表信息中的数据表标识;

生成模块,用于读取预设的模板代码,将所获得的结构信息填充至所读取的模板代码,用所述待替换内容替换所读取的模板代码中替换标记处的内容,获得已填充结构信息和已替换内容的模板代码,作为目标代码,完成代码的生成,其中,所述模板代码中包括设置有替换标记的通用子代码,所述通用子代码为可被重复利用的子代码,所述替换标记用于标记利用所述通用子代码生成不同代码时的区别部分。

本发明具有以下有益效果:应用本发明实施例,对于可重复利用的通用子代码,通过设置替换标记,可以快速完成对通用子代码在不同代码中区别部分的替换、相同部分的保留,无需手动修改通用子代码在不同代码中的区别部分,也无需手动复制相同部分,从而提高了代码生成的效率。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。

图1为本发明实施例提供的代码生成方法的一种流程示意图;

图2为本发明实施例提供的代码生成装置的一种结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。

需要说明的是,本发明所提供的代码生成方法可以应用于电子设备,其中,在具体应用中,该电子设备可以为计算机、个人电脑、平板、手机等等,这都是合理的。

参见图1,本发明实施例提供一种代码生成方法,方法包括如下步骤:

s101、获得界面打开指令,显示数据库连接界面,获得用户通过所述数据库连接界面输入的待连接数据库的连接信息;利用所述连接信息,与所述待连接数据库建立连接;

在获得界面打开指令后,可以显示数据库连接界面。具体的,电子设备在检测到用户的某个操作时,可以生成界面打开指令,例如,可以在检测到用户双击可执行文件时,生成界面打开指令,或者,也可以在检测到用户右击可执行文件后,显示菜单选项,并在检测到菜单选项中的打开选项被选中时,生成界面打开指令,或者,可以在检测到用户双击代码生成应用程序的图标时,生成界面打开指令。

可执行文件可以是事先设计好的、且可以由操作系统进行加载执行的文件,可执行文件的格式类型可以是.exe文件.sys文件.com等类型。本发明对可执行文件的格式类型不做限定。

可执行文件中可以包括预设的模板代码,每个模板代码也可以以文件的形式存在于可执行文件中,通过执行可执行文件,可以完成可执行文件的功能,例如,可执行文件具有连接数据库、读取模板代码和利用模板代码生成目标代码的功能,则执行可执行文件,可以完成数据库连接、读取模板代码和利用所读取的模板代码生成目标代码的过程。

用户可以通过数据库连接界面选择待连接数据库的数据库类型,并可以在选择数据库类型后,通过数据库连接界面输入待连接数据库的连接信息,连接信息包括数据库的ip地址、数据库的端口号、数据库的库名称、用户名及密码等等,用户在输入完成后,可以点击连接按钮,进而,电子设备可以利用连接信息,与待连接数据库建立连接。数据库类型包括oracle数据库、sybase数据库、db2数据库等等。

或者,用户也可以不选择数据库类型,电子设备直接确定待连接数据库的数据库类型为预设的默认数据库类型,数据库连接界面可以包括输入框和连接按钮,用户可以通过输入框输入待连接数据库的连接信息,并在输入完成后,点击连接按钮,进而,电子设备可以利用连接信息,与待连接数据库建立连接。

具体的,可以采用java.sql.connection类连接数据库,或者,也可以采用使用drivermanager类连接数据库,或者,还可以采用datasourcecache类连接数据库。

一种实现方式中,为了便于获得连接状态,提高方法的可靠性,在未成功建立连接的情况下,方法还可以包括:

不执行显示数据表选择界面的步骤,并显示用于提示未成功建立连接的第三提示信息。

另外,在一种实现方式中,还可以显示未连接成功的原因,以便于针对原因,解决未连接成功的问题,从而便于下次成功建立连接。

s102、在成功建立连接后,显示数据表选择界面,获得用户通过所述数据表选择界面输入的表信息,基于所述表信息生成待替换内容,并获得具有目标数据表标识的数据表的结构信息;

其中,所述目标数据表标识为所述表信息中的数据表标识。

数据表标识可以为数据表的表名、预设的数据表编号等可以唯一标识数据表的字符。

为了便于用户理解,数据表标识具体可以为表名,并且为了便于用户快速查找到所需用到的表名,数据表选择界面可以包括表名选择列表和表名搜索框,表名选择列表可以包括已连接的数据库所包含数据表的表名,用户可以通过表名搜索框输入待搜索的目标搜索内容,通过表名搜索框可以快速查找到表名选择列表中含有目标搜索内容的表名,并且数据表选择界面可以显示搜索结果。

例如,若用户在表名搜索框内输入duty,则查找包含有duty字符的表名,并可以将查找到的表名显示在数据表选择界面的左侧列表中,进而用户可以从左侧列表选择表名,在检测到用户通过左侧列表选择表名后,为了便于用户查看,可以在数据表选择界面的右侧显示用户所选择的表名,并且用户还可以通过点击右侧的表名来取消选择,通过这种方式,可以便于用户选择表名,可以认为获得的表信息为用户所选的表名,此时表信息可以仅包括数据表标识。

另一种实现方式中,为了便于将应用于同一功能模块的文件放到同一目录中,以便对文件进行合理管理,所述数据表选择界面可以包括包名输入框、包名确认按钮和数据表选择列表,获得用户通过所述数据表选择界面输入的表信息,基于表信息生成待替换内容,包括:

获得用户通过包名输入框输入的包名,并在检测到包名确认按钮被按下后,将所获得的包名作为待替换包名;

获得用户通过所述数据表选择列表选择的数据表标识,作为目标数据表标识,用目标数据表标识生成待替换类名和待替换对象名。

从而,用户可以通过输入框输入包名,进而,可以将用户输入的包名作为待替换包名,在生成代码后,可以将所生成的代码以文件的形式存在此包名所属的目录下。

例如,在数据表选择界面的右侧部分有同包名设置按钮,在用户点击同包名设置按钮可以弹出对话框,在对话框的输入框中输入要设置的包名。如:在选择duty表后,可以设置包名为duty。

应用本发明实施例,不同的数据表标识可以设置同包名,对于基于每一数据表标识所生成的每一代码,可以将该代码以文件形式存储在同一目录下,实现了对不同文件的统一管理。

又一种实现方式中,所述数据表选择界面还可以包括勾选框和数据表标识文本框,一个数据表标识文本框对应一个勾选框,一个数据表标识文本框用于表征一个数据表标识,所述获得用户通过所述数据表选择界面输入的表信息,包括:

在检测到勾选框被选中时,确定所获得的表信息为被选中的勾选框所对应的数据表标识文本框所表征的数据表标识。

具体的,待替换内容包括待替换包名、待替换类名和待替换对象名,当表信息仅包括数据表标识时,基于所述表信息生成待替换内容具体为:基于目标数据表标识生成待替换包名、待替换类名和待替换对象名;当表信息包括包名和数据表标识时,基于所述表信息生成待替换内容具体为:将表信息中的包名作为待替换包名,基于目标数据表标识生成待替换类名和待替换对象名。

一种实现方式中,目标数据表标识包括字母,基于目标数据表标识生成待替换包名、待替换类名和待替换对象名,包括:

依次提取所述目标数据表标识中的字母,若所提取的字母为大写字母,则将该大写字母转换成小写字母;

按照提取顺序,将转换后所得的小写字母以及提取所得的小写字母合并,得到待替换包名;

将待替换包名中处于第一预设位置的字母转换成大写字母,得到待替换类名;

将待替换类名中处于第二预设位置的字母转换成大写字母,得到待替换对象名。

第一预设位置和第二预设位置可以预先设置,第一预设位置和第二预设位置不同,第二预设位置也可以是第一预设位置之后的第一个位置/第二个位置/第三个位置等,例如第一预设位置可以是首字母的位置,第二预设位置可以是第二个字母的位置,或者第一预设位置也可以是自首字母至第三个字母的位置,第二预设位置可以是第四个字母的位置。

在其他实现方式中,目标数据表标识还可以包括字母和下划线,基于目标数据表标识生成待替换包名、待替换类名和待替换对象名,包括:

依次提取所述目标数据表标识中的字母和下划线,若所提取的字母为大写字母,则将该大写字母转换成小写字母;

按照提取顺序,将转换后所得的小写字母以及提取所得的小写字母合并,得到待替换包名;

将待替换包名中首字母以及处于下划线以后的第一个字母转换成大写字母,得到待替换类名;

将待替换包名中处于下划线以后的第一个字母转换成大写字母,得到待替换对象名。

示例性的,目标数据表标识为user_info,则待替换包名为userinfo,待替换类名为userinfo,待替换对象名为userinfo。

或者,在其他实现方式中,也可以仅将待替换包名中首字母转换成大写字母,得到待替换类名,也可以将待替换包名中处于下划线以后的第一个字母和第二个字母转换成大写字母,得到待替换对象名。

数据表选择界面还可以包括生成按钮,在用户选择表名后,可以点击生成按钮,进而电子设备可以会根据选择好的表名,到数据库中查询具有该表名的数据表的结构信息。结构信息可以包括字段名、类型、长度、是否为空、是否为主键等等。

s103、读取预设的模板代码,将所获得的结构信息填充至所读取的模板代码,用所述待替换内容替换所读取的模板代码中替换标记处的内容,获得已填充结构信息和已替换内容的模板代码,作为目标代码,完成代码的生成。

其中,所述模板代码中包括设置有替换标记的通用子代码,所述通用子代码为可被重复利用的子代码,所述替换标记用于标记利用所述通用子代码生成不同代码时的区别部分。

模板代码可以根据设计者的需求事先设定,模板代码可以以模板文件的形式存在,可以采用文件流方式读取各模板文件,将文件内容读取为字符串内容,另外,还可以在读取成功时,将读取到的字符串内容存放到内存中;在读取失败时,显示用于提示读取模板内容失败的提示信息,并可以显示失败原因,如文件不存在等。

模板代码可以用于定义一个操作中算法的框架,可以包括一个或多个通用子代码,在不同的代码中,通用子代码的大部分内容是相同的,只有少部分内容不同,可以通过对模板代码进行少量的修改,来生成不同的代码。

例如,对数据表通常需要进行增加记录/删除记录/修改记录/查找记录等操作,针对不同数据表生成的代码中,用于实现增加记录、删除记录、修改记录和查找记录等功能的子代码的大部分内容是相同的,只有包名、类名、对象名可能是不同的,为了满足用户对不同数据表的操作需求,快速的生成代码,可以对需要替换的包名、类名和对象名进行标记,以形成替换标记。

具体的,替换标记可以包括包名替换标记、类名替换标记和对象名替换标记,待替换内容可以包括待替换包名、待替换类名和待替换对象名,用待替换内容替换所读取的模板代码中替换标记处的内容,包括:

用待替换包名来替换所述包名替换标记中的内容,用待替换类名来替换所述类名替换标记中的内容,用待替换对象名来替换所述对象名替换标记中的内容。

在其他实现方式中,也可以替换标记可以仅包括包名替换标记,待替换内容可以仅包括待替换包名,或者,也可以替换标记可以包括包名替换标记和类名替换标记,待替换内容可以仅包括待替换包名和待替换类名。

本发明对替换标记的具体形式不做限定,例如包名替换标记可以${package}、类名替换标记可以为${upmark},对象名替换标记可以为${lowmark}。

示例性的,待替换包名为userinfo,待替换类名为userinfo,待替换对象名为userinfo,则将包名替换标记(${package}替换成userinfo),类名替换标记(${upmark})替换成userinfo,对象名替换标记(${lowmark})替换成userinfo。

具体的,替换标记可以设置于通用子代码的声明部分和初始化部分。

可见,应用本发明实施例,对于可重复利用的通用子代码,通过设置替换标记,可以快速完成对通用子代码在不同代码中区别部分的替换、相同部分的保留,无需手动修改通用子代码在不同代码中的区别部分,也无需手动复制相同部分,从而提高了代码生成的效率。

一种实现方式中,在得到目标代码后,方法还可以包括以下步骤:

将所述目标代码以文件形式写入磁盘;判断是否成功写入磁盘;若成功,则显示用于提示已成功写入磁盘的第一提示信息;若不成功,则显示用于提示未成功写入磁盘的第二提示信息,并返回执行显示数据表选择界面的步骤。

本发明对第一提示信息和第二提示信息的具体内容形式不做限定,例如第一提示信息和第二提示信息可以均为提示框,第一提示信息在提示框里的内容用于表明目标代码已成功写入磁盘,第一提示信息在提示框里的内容用于表明目标代码未成功写入磁盘。

另一种实现方式中,当生成的目标代码有多个时,每个目标代码可以分别以文件形式存在,并可以分别将每个目标代码的文件写入到磁盘中,如果文件写入成功则显示第一提示信息,提示写入成功,并返回到数据表选择界面;如果文件写入失败,则显示第二提示信息,提示文件写入失败,并返回到数据表选择界面。

可见,应用本发明实施例,若文件写入成功则提示写入成功,并返回到数据表选择界面;如果文件写入失败,则提示文件写入失败,并返回到数据表选择界面,便于获得写入状态。

另外,如果目标代码以文件形式存储在某个文件目录下,则可以将该文件目录拷贝到集成开发环境中,并在集成开发环境中新建项目,就可以看到生成的目标代码,并可以编译项目,在重新启动服务器后,在服务器的浏览器中输入该项目的链接地址,就可以看到运行目标代码所实现的功能。集成开发环境可以为myeclipse,服务器可以为tomcat6.0。

例如,目标代码用于实现值班管理界面中的新增记录、编辑记录、删除记录、记录详情查询和列表功能,则运行目标代码就能显示值班管理界面,并且能前述功能。在编辑记录页面还可以包括编辑时的基本验证,如长度验证,必填项验证,时间选择框验证等功能。

与上述的方法实施例相对应,本发明实施例还提供一种代码生成装置。

参见图2,图2为本发明实施例所提供的一种代码生成装置的结构示意图,装置包括:

第一获得模块201,用于获得界面打开指令,显示数据库连接界面,获得用户通过所述数据库连接界面输入的待连接数据库的连接信息;利用所述连接信息,与所述待连接数据库建立连接;

第二获得模块202,用于在成功建立连接后,显示数据表选择界面,获得用户通过所述数据表选择界面输入的表信息,基于所述表信息生成待替换内容,并获得具有目标数据表标识的数据表的结构信息;其中,所述目标数据表标识为所述表信息中的数据表标识;

生成模块203,用于读取预设的模板代码,将所获得的结构信息填充至所读取的模板代码,用所述待替换内容替换所读取的模板代码中替换标记处的内容,获得已填充结构信息和已替换内容的模板代码,作为目标代码,完成代码的生成,其中,所述模板代码中包括设置有替换标记的通用子代码,所述通用子代码为可被重复利用的子代码,所述替换标记用于标记利用所述通用子代码生成不同代码时的区别部分。

可见,应用本发明实施例,对于可重复利用的通用子代码,通过设置替换标记,可以快速完成对通用子代码在不同代码中区别部分的替换、相同部分的保留,无需手动修改通用子代码在不同代码中的区别部分,也无需手动复制相同部分,从而提高了代码生成的效率。

可选的,所述替换标记设置于所述通用子代码的声明部分和初始化部分。

可选的,所述待替换内容包括待替换包名、待替换类名和待替换对象名,所述数据表选择界面包括勾选框和数据表标识文本框,一个数据表标识文本框对应一个勾选框,一个数据表标识文本框用于表征一个数据表标识,

所述第二获得模块202获得用户通过所述数据表选择界面输入的表信息,基于表信息生成待替换内容,具体为:

在检测到勾选框被选中时,将被选中的勾选框所对应的数据表标识文本框所表征的数据表标识作为表信息;

基于目标数据表标识生成待替换包名、待替换类名和待替换对象名。

可选的,所述待替换内容包括待替换包名、待替换类名和待替换对象名,所述数据表选择界面包括包名输入框、包名确认按钮和数据表选择列表,第二获得模块202获得用户通过所述数据表选择界面输入的表信息,基于表信息生成待替换内容,具体为:

获得用户通过包名输入框输入的包名,并在检测到包名确认按钮被按下后,将所获得的包名作为待替换包名;

获得用户通过所述数据表选择列表选择的数据表标识,作为目标数据表标识,基于目标数据表标识生成待替换类名和待替换对象名。

可选的,所述目标数据表标识包括字母,所述第二获得模块202基于目标数据表标识生成待替换包名、待替换类名和待替换对象名,具体为:

依次提取所述目标数据表标识中的字母,若所提取的字母为大写字母,则将该大写字母转换成小写字母;

按照提取顺序,将转换后所得的小写字母以及提取所得的小写字母合并,得到待替换包名;

将待替换包名中处于第一预设位置的字母转换成大写字母,得到待替换类名;

将待替换类名中处于第二预设位置的字母转换成大写字母,得到待替换对象名。

可选的,目标数据表标识包括字母和下划线,所述第二获得模块202基于目标数据表标识生成待替换包名、待替换类名和待替换对象名,具体为:

依次提取所述目标数据表标识中的字母和下划线,若所提取的字母为大写字母,则将该大写字母转换成小写字母;

按照提取顺序,将转换后所得的小写字母以及提取所得的小写字母合并,得到待替换包名;

将待替换包名中首字母以及处于下划线以后的第一个字母转换成大写字母,得到待替换类名;

将待替换包名中处于下划线以后的第一个字母转换成大写字母,得到待替换对象名。

可选的,替换标记包括包名替换标记、类名替换标记和对象名替换标记,待替换内容包括待替换包名、待替换类名和待替换对象名,

生成模块203用所述待替换内容替换所读取的模板代码中替换标记处的内容,具体为:

用待替换包名来替换所述包名替换标记中的内容,用待替换类名来替换所述类名替换标记中的内容,用待替换对象名来替换所述对象名替换标记中的内容。

可选的,所述装置还包括写入模块,用于:

在得到目标代码后,将所述目标代码以文件形式写入磁盘;

判断是否成功写入磁盘;

若成功,则显示用于提示已成功写入磁盘的第一提示信息;

若不成功,则显示用于提示未成功写入磁盘的第二提示信息,并返回执行显示数据表选择界面。

可选的,所述装置还包括提示模块,用于:

在未成功建立连接的情况下,不执行显示数据表选择界面的步骤,并显示用于提示未成功建立连接的第三提示信息。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1