掌桥专利:专业的专利平台
掌桥专利
首页

代码生成方法、装置、设备及计算机可读存储介质

文献发布时间:2023-06-19 12:19:35


代码生成方法、装置、设备及计算机可读存储介质

技术领域

本申请属于数据库技术领域,尤其涉及一种代码生成方法、装置、设备及计算机可读存储介质。

背景技术

在大数据的时代背景下,数据越来越重要,需要存储和管理的数据也越来越多。数据库既可以存储数据又可以集中管理数据,软件的开发也多基于数据库进行。

目前有多种类型的数据库可供软件调用,但不同类型的数据库的调用方法不同,对应的数据库驱动也不同。

用户针对要访问的数据库编写对应的代码,若要访问的数据库的类型发生改变,就要重新编写相应的代码,导致代码编写的人工成本高,代码编写效率低。

发明内容

本申请提供一种代码生成方法、装置、设备及计算机可读存储介质,可以提高代码编写效率。

第一方面,本申请实施例提供了一种代码生成方法,包括:

在配置文件中配置目标数据库的信息和所述目标数据库中目标表的信息;

根据所述配置文件运行第一脚本,生成所述目标表的表结构信息文件;

根据所述表结构信息文件运行第二脚本,生成用于操作所述目标表的代码和所述代码的自动化编译文件。

在第一方面的一种可能的实现方式中,所述目标数据库的信息包括所述目标数据库的类型和所述目标数据库的访问信息,所述目标表的信息包括所述目标表的名称;

所述根据所述配置文件运行第一脚本,生成所述目标表的表结构信息文件,包括:

运行所述第一脚本,根据所述目标数据库的类型加载对应的数据库驱动插件;

根据所述目标数据库的类型和所述访问信息连接所述目标数据库;

根据所述目标表的名称访问所述目标表,获取所述目标表的字段及字段属性;

根据所述目标表的名称、所述目标表的字段及字段属性生成所述表结构信息文件。

在第一方面的一种可能的实现方式中,所述访问信息包括所述目标数据库的名称、端口、主机、账号和密码。

在第一方面的一种可能的实现方式中,所述根据所述表结构信息文件运行第二脚本,生成用于操作所述目标表的代码和所述代码的自动化编译文件,包括:

运行所述第二脚本,根据所述表结构信息文件和预设操作函数生成用于操作所述目标表的代码,所述预设操作函数用于对数据库中的表进行预设操作,所述代码包括用于操作所述目标表的目标操作函数;

根据所述表结构信息文件生成所述代码的自动化编译文件。

在第一方面的一种可能的实现方式中,运行所述自动化编译文件,将所述代码编译为动态库文件。

在第一方面的一种可能的实现方式中,获取操作代码,所述操作代码用于调用所述动态库文件对所述目标表进行目标操作;

运行所述操作代码,调用所述动态库文件对所述目标表进行目标操作。

在第一方面的一种可能的实现方式中,所述操作包括下列中的至少一项:增加表操作、删除表操作、修改表操作或查询表操作。

第二方面,本申请实施例提供了一种代码生成装置,包括:

配置模块,用于在配置文件中配置目标数据库的信息和所述目标数据库中目标表的信息;

第一执行模块,用于根据所述配置文件运行第一脚本,生成所述目标表的表结构信息文件;

第二执行模块,用于根据所述表结构信息文件运行第二脚本,生成用于操作所述目标表的代码和所述代码的自动化编译文件。

在第二方面的一种可能的实现方式中,所述目标数据库的信息包括所述目标数据库的类型和所述目标数据库的访问信息,所述目标表的信息包括所述目标表的名称,所述第一执行模块具体用于:

运行所述第一脚本,根据所述目标数据库的类型加载对应的数据库驱动插件;

根据所述目标数据库的类型和所述访问信息连接所述目标数据库;

根据所述目标表的名称访问所述目标表,获取所述目标表的字段及字段属性;

根据所述目标表的名称、所述目标表的字段及字段属性生成所述表结构信息文件。

在第二方面的一种可能的实现方式中,所述访问信息包括所述目标数据库的名称、端口、主机、账号和密码。

在第二方面的一种可能的实现方式中,所述第二执行模块,具体用于:

运行所述第二脚本,根据所述表结构信息文件和预设操作函数生成用于操作所述目标表的代码,所述预设操作函数用于对数据库中的表进行预设操作,所述代码包括用于操作所述目标表的目标操作函数;

根据所述表结构信息文件生成所述代码的自动化编译文件。

在第二方面的一种可能的实现方式中,所述代码生成装置还包括编译模块,所述编译模块用于:

运行所述自动化编译文件,将所述代码编译为动态库文件。

在第二方面的一种可能的实现方式中,所述代码生成装置还包括操作模块,所述操作模块用于:

获取操作代码,所述操作代码用于调用所述动态库文件对所述目标表进行目标操作;

运行所述操作代码,调用所述动态库文件对所述目标表进行目标操作。

在第二方面的一种可能的实现方式中,所述操作包括下列中的至少一项:增加表操作、删除表操作、修改表操作或查询表操作。

第三方面,本申请实施例提供了一种终端设备,包括:存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述第一方面中任一项所述的代码生成方法。

第四方面,本申请实施例提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述第一方面中任一项所述的代码生成方法。

第五方面,本申请实施例提供了一种计算机程序产品,当计算机程序产品在终端设备上运行时,使得终端设备执行上述第一方面中任一项所述的代码生成方法。

本申请提供的代码生成方法、装置、设备及计算机可读存储介质,通过在配置文件中配置目标数据库的信息和目标表的信息,并运行第一脚本生成目标表的表结构信息文件,运行第二脚本生成用于操作目标表的代码和自动化编译文件。若用户待操作的数据库中的表发生改变时,只需修改配置文件中对应的目标数据库的信息和目标表的信息,重新运行第一脚本和第二脚本,就可以快速的生成用于操作目标表的代码和自动化编译文件。本申请通过自动生成代码的方式,适用于不同类型的数据库,有效减少了编写代码的工作量,降低了人工成本,提高了代码编写的效率。

附图说明

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

图1是本申请一实施例提供的终端设备的结构示意图;

图2是本申请一实施例提供的代码生成方法的一种流程示意图;

图3是本申请一实施例提供的代码生成方法的另一种流程示意图;

图4是本申请一实施例提供的代码生成装置的结构示意图。

具体实施方式

为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。

可以理解,本申请实施例中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。

本申请实施例提供的代码生成方法,可以应用于终端设备。示例性的,图1为本申请一实施例提供的终端设备的结构示意图。如图1所示,终端设备1可以包括:处理器10、存储器11以及存储在存储器11中并可在处理器10上运行的计算机程序12,处理器10执行计算机程序12时可以实现本申请实施例提供的代码生成方法。其中,本申请实施例对处理器10、存储器11的数量和类型不做限定。

本申请实施例对终端设备1的类型不做限定。例如,可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。

下面将结合附图,对本申请中的技术方案进行详细描述。需要说明,在不冲突的情况下,本申请中不同的技术特征之间可以相互结合。

图2是本申请一实施例提供的代码生成方法的一种流程示意图,如图2所示,本申请实施例提供的生成代码方法,可以包括:

S201、在配置文件中配置目标数据库的信息和目标数据库中目标表的信息。

可选的,目标数据库的信息包括目标数据库的类型和目标数据库的访问信息。

可选的,目标数据库的类型包括但不限于:MySQL,Oracle,DB2,SQLServer。

可选的,目标数据库的访问信息可以包括:数据库的名称、端口、主机、账号、密码。具体的,通过目标数据库的访问信息可以唯一确定目标数据库,从而准确的连接目标数据库。

示例性的,配置文件createXML.conf中存在代码语句:

#数据库驱动类型

dbDriver=oracle

#数据库主机

dbHost=172.168.199.64

#端口

dbPort=1521

#数据库名称

dbName=uppsdb

#数据库账号

dbUser=upps

上述代码语句表示要连接类型为oracle、主机为172.168.199.64、端口为1521、名称为uppsdb、账号为upps的数据库。通过在配置文件中配置目标数据库的多个信息可以准确的连接目标数据库。

可选的,目标表的信息包括目标表的名称。目标表为想要访问或操作的表。通过在配置文件中配置目标表的信息可以准确的确定目标表。

可选的,目标表可以通过在配置文件中设置多种信息确定,包括但不限于:导出的模式的信息、导出的目标表的信息、不导出的目标表的信息、过滤选项页的信息。

示例性的,配置文件createXML.conf中存在代码语句:

#只导出此模式下对象

dbSchema=upps

#不导这些表,以逗号分割

exclTableList=

#只导这些表,以逗号分割

tableList=T_USI_PAYACC

##对选项页进行过滤

tableLike=

上述代码语句表示要访问模式upps下的名称为T_USI_PAYACC的表。通过多种信息可以更准确、方便的确定一个或多个目标表。

S202、根据配置文件运行第一脚本,生成目标表的表结构信息文件。

通过运行第一脚本,可以根据配置文件中的信息自动生成目标表的表结构信息文件,降低人工编写代码的成本,提高代码编写的效率。

S203、根据表结构信息文件运行第二脚本,生成用于操作目标表的代码和代码的自动化编译文件。

可选的,S203可以包括:

运行第二脚本,根据表结构信息文件和预设操作函数生成用于操作目标表的代码,预设操作函数用于对数据库中的表进行预设操作,代码包括用于操作目标表的目标操作函数。

根据表结构信息文件生成代码的自动化编译文件。

可选的,对表的操作包括下列中的至少一项:增加表操作、删除表操作、修改表操作或查询表操作。具体的,增加表操作可以增加表的字段或字段数据、删除表操作可以删除表的字段或字段数据、修改表操作可以修改表的字段或字段数据、查询表操作可以查询表的字段或字段数据。

具体的,不同的预设操作函数对应不同的预设操作,根据表结构信息文件可以生成对应不同目标操作的目标操作函数。

示例性的,预设操作函数为删除表的预设函数delete(),根据表T_USI_PAYACC的表结构信息文件和删除表的预设函数delete()生成删除表T_USI_PAYACC的目标操作函数delete_(),目标操作函数delete_()可以根据输入直接删除表T_USI_PAYACC中指定的字段或字段数据。

通过预设操作函数,可以直接根据表结构信息文件自动生成目标表的目标操作函数,从而快速得到目标操作函数,适用于不同的表的表结构信息文件,有效减少了编写代码的工作量,降低了人工成本,提高目标操作函数的代码编写效率。

可选的,在一种可能的实现方式中,本申请实施例提供的代码生成方法应用于Linux系统,生成的用于操作目标表的代码可以为C++代码,用于存储C++代码的C++代码文件可以包括格式为.hpp的C++头文件和格式为.cpp的C++源文件,自动化编译文件可以为makefile文件。

示例性的,C++代码文件包括T_USI_PAYACC.hpp和T_USI_PAYACC.cpp。

本申请实施例提供的代码生成方法,通过在配置文件中配置目标数据库的信息和目标表的信息,并运行第一脚本生成目标表的表结构信息文件,运行第二脚本生成用于操作目标表的代码和自动化编译文件。若用户代操作的数据库中的表发生改变时,只需修改配置文件中对应的目标数据库的信息和目标表的信息,重新运行第一脚本和第二脚本,就可以快速的生成用于操作改变后的目标表的代码和自动化编译文件。本申请通过自动生成代码的方式,适用于不同类型的数据库,有效减少了编写代码的工作量,降低了人工成本,提高了代码编写的效率。

可选的,本申请实施例提供了S202的一种可能的实现方式,如图3所示,S202中,根据配置文件运行第一脚本,生成目标表的表结构信息文件,可以包括:

S301、运行第一脚本,根据目标数据库的类型加载对应的数据库驱动插件。

具体的,根据目标数据库的数据库类型加载对应的数据库驱动插件访问目标数据库,数据库驱动插件可以是采用C++数据库连接(C++Database Connectivity,CDBC)技术编写的分别对应不同类型数据库的数据库驱动插件。

第一脚本根据目标数据库的类型加载对应类型的数据库驱动插件,可以顺利访问目标数据库。

S302、根据目标数据库的类型和访问信息连接目标数据库。

具体的,根据配置文件中目标数据库的类型和访问信息,加载对应的数据库驱动插件连接目标数据库。

示例性的,运行第一脚本createXML.sh,根据配置文件createXML.conf中数据库类型oracle加载oracle数据库驱动插件,并根据主机为172.168.199.64、端口为1521、名称为uppsdb、账号为upps的访问信息连接uppsdb数据库。

通过目标数据库的多个信息可以准确的连接目标数据库。

S303、根据目标表的名称访问目标表,获取目标表的字段及字段属性。

示例性的,配置文件中存在代码语句:

#只导这些表,以逗号分割

tableList=T_USI_PAYACC

上述代码语句表示获取表T_USI_PAYACC的字段及字段属性。根据目标表的名称可以准确的获取目标表的字段及字段属性。

S304、根据目标表的名称、目标表的字段及字段属性生成表结构信息文件。

示例性的,根据表的名称T_USI_PAYACC、表T_USI_PAYACC的字段及字段属性生成表T_USI_PAYACC的表结构信息文件,表结构信息文件中包含表的名称T_USI_PAYACC、字段及字段属性。

可选的,配置信息还包括预先设定的表结构信息文件的路径和名称。运行第一脚本,根据配置文件中预先设定的表结构信息文件的路径和名称在对应路径生成对应名称的表结构信息文件。

示例性的,配置文件createXML.conf中存在代码语句:

#目标文件

outFile=./DemoDevEntity.xml

上述代码语句表示运行第一脚本输出的表结构信息文件的路径为当前路径,名称为DemoDevEntity,文件格式为xml。

通过预先设定输出文件的路径和名称,可以根据需要选择恰当的路径和名称,方便寻找和辨别文件。

通过上述实现方式,可以根据数据库的类型和访问信息加载对应的数据库驱动插件并连接目标数据库,从而通过目标表的名称获取目标表的表结构信息文件。若用户待操作的数据库或表发生改变时,只需修改配置文件中对应的目标数据库的信息和目标表的信息,重新运行第一脚本,就可以快速的生成目标表的表结构信息文件。通过自动生成代码的方式,适用于不同类型的数据库或表,有效减少了编写代码的工作量,降低了人工成本,提高了代码编写的效率。

在上述实施例的基础上,在本申请另一实施例中,提供了代码生成方法的另一种实现方式,具体的,在S203之后,还可以包括:

运行自动化编译文件,将代码编译为动态库文件。

可选的,基于Linux系统,运行makefile文件,将C++代码编译为.so格式的动态库文件。示例性的,运行makefile文件,将T_USI_PAYACC.hpp和T_USI_PAYACC.cpp编译为可访问的动态库libDbEntity.demo.so。

通过makefile文件将代码自动化编译为动态库文件,方便机器识别和执行代码中的功能,提高了代码的执行效率。

可选的,运行自动化编译文件,将代码编译为动态库文件之后,还可以包括:

获取操作代码,操作代码用于调用动态库文件对目标表进行目标操作。

运行操作代码,调用动态库文件对目标表进行目标操作。

可选的,操作代码为可以实现对表进行增加表操作、删除表操作、修改表操作或查询表操作等操作中至少一项操作的C++操作代码,本申请生成的动态库文件可以被C++操作代码调用,从而访问数据库中的目标表并对目标表的字段或字段数据进行操作。

示例性的,对表T_USI_PAYACC中字段name的字段数据进行删除操作,可以包括:操作代码调用动态库文件libDbEntity.demo.so,并根据删除字段name的字段数据的操作语句删除表T_USI_PAYACC中字段name的字段数据,或根据删除字段name第5行字段数据的操作语句删除表T_USI_PAYACC中字段name的第5行字段数据。

通过操作代码调用动态库,并根据目标操作函数对表的字段或字段数据进行增加、删除、修改或查询等操作,可以直接对目标表中的字段或字段数据进行操作。

本实施例中,通过自动化编译文件可以直接将代码编译为动态库文件,减少了人工编写生成动态库文件的代码的工作量,更快速、方便的得到动态库文件,提高了代码的编写效率。动态库文件可以被机器识别,通过调用动态库文件可以直接地访问目标表,并根据操作代码完成对目标表的目标操作。

本申请实施例还提供了一种代码生成装置,示例性的,图4是本申请实施例提供的一种代码生成装置的结构示意图。如图4所示,本实施例提供的代码生成装置,可以包括:

配置模块401,用于在配置文件中配置目标数据库的信息和所述目标数据库中目标表的信息;

第一执行模块402,用于根据所述配置文件运行第一脚本,生成所述目标表的表结构信息文件;

第二执行模块403,用于根据所述表结构信息文件运行第二脚本,生成用于操作所述目标表的代码和所述代码的自动化编译文件。

可选的,所述目标数据库的信息包括所述目标数据库的类型和所述目标数据库的访问信息,所述目标表的信息包括所述目标表的名称,所述第一执行模块402具体用于:

运行所述第一脚本,根据所述目标数据库的类型加载对应的数据库驱动插件;

根据所述目标数据库的类型和所述访问信息连接所述目标数据库;

根据所述目标表的名称访问所述目标表,获取所述目标表的字段及字段属性;

根据所述目标表的名称、所述目标表的字段及字段属性生成所述表结构信息文件。

可选的,所述访问信息包括所述目标数据库的名称、端口、主机、账号和密码。

可选的,所述第二执行模块403具体用于:

运行所述第二脚本,根据所述表结构信息文件和预设操作函数生成用于操作所述目标表的代码,所述预设操作函数用于对数据库中的表进行预设操作,所述代码包括用于操作所述目标表的目标操作函数;

根据所述表结构信息文件生成所述代码的自动化编译文件。

可选的,所述代码生成装置还包括编译模块404,所述编译模块404用于:

运行所述自动化编译文件,将所述代码编译为动态库文件。

可选的,所述代码生成装置还包括操作模块405,所述操作模块405用于:

获取操作代码,所述操作代码用于调用所述动态库文件对所述目标表进行目标操作;

运行所述操作代码,调用所述动态库文件对所述目标表进行目标操作。

可选的,所述操作包括下列中的至少一项:增加表操作、删除表操作、修改表操作或查询表操作。

本申请实施例提供的代码生成装置,用于执行本申请方法实施例提供的代码生成方法,技术原理和技术效果相似,具体可参见方法实施例部分,此处不再赘述。

应理解,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,各功能单元、模块的具体名称只是为了便于相互区分,并不用于限制本申请的保护范围,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成。

本申请实施例还提供了一种终端设备,例如图1所示,该终端设备包括:至少一个处理器、存储器以及存储在所述存储器中并可在所述至少一个处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述任意方法实施例中的步骤。

本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时可实现上述任意方法实施例中的步骤。

本申请实施例还提供了一种计算机程序产品,当计算机程序产品在终端设备上运行时,所述终端设备执行上述任意方法实施例中的步骤。

本领域技术人员可以理解,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。

以上所述实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围,均应包含在本申请的保护范围之内。

相关技术
  • 代码生成方法、代码生成装置以及计算机可读存储介质
  • 代码生成方法、装置、电子设备和计算机可读存储介质
技术分类

06120113256250