CN109885291A - 一种代码自动生成方法及代码自动生成器 - Google Patents
一种代码自动生成方法及代码自动生成器 Download PDFInfo
- Publication number
- CN109885291A CN109885291A CN201910075242.XA CN201910075242A CN109885291A CN 109885291 A CN109885291 A CN 109885291A CN 201910075242 A CN201910075242 A CN 201910075242A CN 109885291 A CN109885291 A CN 109885291A
- Authority
- CN
- China
- Prior art keywords
- database
- template
- interface
- code
- information
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 53
- 238000013499 data model Methods 0.000 claims description 16
- 238000011068 loading method Methods 0.000 claims description 13
- 238000004590 computer program Methods 0.000 claims description 12
- 230000004048 modification Effects 0.000 claims description 10
- 238000012986 modification Methods 0.000 claims description 9
- 238000012360 testing method Methods 0.000 claims description 9
- 238000005516 engineering process Methods 0.000 abstract description 9
- 238000004321 preservation Methods 0.000 abstract description 7
- 230000008569 process Effects 0.000 description 13
- 230000006870 function Effects 0.000 description 11
- 238000010586 diagram Methods 0.000 description 10
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000011161 development Methods 0.000 description 3
- 238000009877 rendering Methods 0.000 description 3
- 239000000243 solution Substances 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 229910002056 binary alloy Inorganic materials 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 230000008878 coupling Effects 0.000 description 2
- 238000005538 encapsulation Methods 0.000 description 2
- 238000002347 injection Methods 0.000 description 2
- 239000007924 injection Substances 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 235000010086 Setaria viridis var. viridis Nutrition 0.000 description 1
- 238000012790 confirmation Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 244000230342 green foxtail Species 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000006386 memory function Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 238000009416 shuttering Methods 0.000 description 1
- 235000013599 spices Nutrition 0.000 description 1
Landscapes
- Stored Programmes (AREA)
Abstract
本申请公开了一种代码自动生成方法及代码自动生成器。该方法包括:接收数据库的选择指令;根据所述选择指令获取目标数据库的连接配置;根据所述目标数据库的连接配置,连接所述目标数据库;获取所述目标数据库中的数据库表的信息;获取生成代码的模板;获取界面配置;根据所述界面配置,配置界面;以及在所述界面上运行模板引擎,根据所述数据库表的信息和所述模板生成代码文件。还公开了相应的装置。采用本申请的方案,可以根据保存的数据库的连接配置和界面配置,从数据库表中获取信息,利用模板自动生成代码,采用开源的模板引擎模板语法相对容易学习,也易于扩展,不限制生成代码的编程语言,不限定技术。
Description
技术领域
本申请涉及计算机领域,尤其涉及一种代码自动生成方法及代码自动生成器。
背景技术
在软件代码的开发过程中有很多代码都是结构模式比较类似的,我们把它定义为重复性代码。一般有模型类、接口类、业务类、数据访问类,这些类型的代码大多只是属性字段不一样,方法名称不一样,但结构模式是类似的。程序员在开发这些代码的时候,往往是拷贝已经实现的代码然后加以修改从而实现新的功能。这个拷贝修改的过程是比较繁琐的,而且容易出错,另外不同程序员的编码习惯也不尽相同,协同开发也会造成代码风格良莠不齐,这样不利于代码的维护。代码生成器可以解决以上问题,它作为一个工具可以大大增加程序员的代码开发效率。网络上有不少功能相似的代码生成器,其中比较有代表性的有动软代码生成器、Database2Sharp、EasyCode。
虽然网络上的代码生成器不少,但都存在一些不足。例如收费、版权、技术限定、编程语言限定、不利于扩展等。代码生成器属于比较偏向于定制化的工具,也很难做到面面俱到,更不存在一个工具解决所有问题的可能性。就目前的代码生成器,大多都是个人定制然后发布在网络上的,产品级的工具也是比较少的,获取难度比较大的。稍微好用一点的代码生成器都是要收费的,如Database2Sharp、EasyCode。动软代码生成器不收费,但也有少许广告。
动软代码生成器是集大成者,源代码是公开的(非开源),工具可免费使用,功能全面、扩展能力强,缺点很少。稍有不足的是它使用的是asp.net页面指令实现的模板,没有接触过的学习难度大,另外资料较少还必须去其官网了解自定义的接口方法,其提供的组件扩展接口也有类似问题。如果不更改模板,生成出的代码固定是三层结构的,可能会与已有代码不相容。Database2Sharp和EasyCode的优点是可以生成界面,这样也导致了技术限定,必须引用其提供的dll,这些dll大多是不开源或者收费的第三方组件。另外这两个工具的扩展性也是较差的,它们不提供扩展接口或者模板编辑接口,生成代码的编程语言也限定在C#。
基于此,本申请提供一种没有技术限定、扩展性强、易掌握的代码自动生成方案。
发明内容
本申请提供一种代码自动生成方法及代码自动生成器,以解决代码生成中的具有技术限定、编程语言限定、不利于扩展的问题。
第一方面,提供了一种代码自动生成方法,所述方法包括:接收数据库的选择指令;根据所述选择指令获取目标数据库的连接配置;根据所述目标数据库的连接配置,连接所述目标数据库;获取所述目标数据库中的数据库表的信息;获取生成代码的模板;获取界面配置;根据所述界面配置,配置界面;以及在所述界面上运行模板引擎,根据所述数据库表的信息和所述模板生成代码文件。
在一个实现方式中,所述方法还包括:接收连接数据库的信息;将所述信息填充到所述数据库的数据模型中;利用填充到所述数据模型中的信息拼接得到连接字符串;测试所述数据库连接;以及存储所述数据库的连接配置。
在另一个实现方式中,所述存储所述数据库的连接配置,包括:将所述数据库的连接配置进行序列化;以及存储所述序列化后的所述数据库的连接配置,其中,一个数据库的类型对应一个数据库的连接配置。
在又一个实现方式中,所述方法还包括:接收用户的界面配置,所述界面配置包括以下一个或多个信息:数据库类型、是否自动加载数据库表、项目名称、测试人员;将所述界面配置序列化;以及存储所述序列化后的界面配置。
在又一个实现方式中,所述在所述界面上运行模板引擎,根据所述数据库表的信息和所述模板生成代码文件,包括:在所述界面上运行模板引擎,利用所述数据库表中的数据信息作为所述模板的数据源,利用所述模板生成代码文件。
在又一个实现方式中,所述方法还包括:根据自定义的表名,获取数据库表;将查找到的所述数据库表的列名封装成模型对象;将所述模型对象渲染到自定义命名窗口上;在所述自定义命名窗口上接收对所述列名的修改;以及保存修改后的模型对象。
在又一个实现方式中,所述在所述界面上运行模板引擎,根据所述数据库表的信息和所述模板生成代码文件,包括:在所述界面上运行模板引擎,利用所述数据库中的表名和列名作为所述模块的数据源,利用所述模板生成代码文件。
第二方面,提供了一种代码自动生成器,所述代码自动生成器包括:第一接收单元,用于接收数据库的选择指令;第一获取单元,用于根据所述选择指令获取目标数据库的连接配置;连接单元,用于根据所述目标数据库的连接配置,连接所述目标数据库;第二获取单元,用于获取所述目标数据库中的数据库表的信息;第三获取单元,用于获取生成代码的模板;第四获取单元,用于获取界面配置;配置单元,用于根据所述界面配置,配置界面;以及生成单元,用于在所述界面上运行模板引擎,根据所述数据库表的信息和所述模板生成代码文件。
在一个实现方式中,所述代码自动生成器还包括:第二接收单元,用于接收连接数据库的信息;填充单元,用于将所述信息填充到所述数据库的数据模型中;拼接单元,用于利用填充到所述数据模型中的信息拼接得到连接字符串;测试单元,用于测试所述数据库连接;以及第一存储单元,用于存储所述数据库的连接配置。
在另一个实现方式中,所述第一存储单元用于将所述数据库的连接配置进行序列化;以及存储所述序列化后的所述数据库的连接配置,其中,一个数据库的类型对应一个数据库的连接配置。
在又一个实现方式中,所述代码自动生成器还包括:第三接收单元,用于接收用户的界面配置,所述界面配置包括以下一个或多个信息:数据库类型、是否自动加载数据库表、项目名称、测试人员;将所述界面配置序列化;以及第二存储单元,用于存储所述序列化后的界面配置。
在又一个实现方式中,所述生成单元用于在所述界面上运行模板引擎,利用所述数据库表中的数据信息作为所述模板的数据源,利用所述模板生成代码文件。
在又一个实现方式中,所述代码自动生成器还包括:第五获取单元,用于根据自定义的表名,获取数据库表;封装单元,用于将查找到的所述数据库表的列名封装成模型对象;渲染单元,用于将所述模型对象渲染到自定义命名窗口上;修改单元,用于在所述自定义命名窗口上接收对所述列名的修改;以及保存单元,用于保存修改后的模型对象。
在又一个实现方式中,所述生成单元用于在所述界面上运行模板引擎,利用所述数据库中的表名和列名作为所述模块的数据源,利用所述模板生成代码文件。
第三方面,提供了一种代码自动生成器,包括处理器、输入设备、输出设备和存储器,其中,所述存储器用于存储计算机程序,所述计算机程序包括程序指令,所述处理器被配置用于调用所述程序指令,执行上述第一方面中所述的方法。
第四方面,提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述第一方面中所述的方法。
第五方面,提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面中所述的方法。
采用本申请的代码自动方法及代码自动生成器,可以根据保存的数据库的连接配置和界面配置,从数据库表中获取信息,利用模板自动生成代码,采用开源的模板引擎,模板语法相对容易学习,也易于扩展,不限制生成代码的编程语言,不限定技术。
附图说明
图1为本申请实施例提供的一种代码自动生成器的架构示意图;
图2为本申请实施例提供的一种代码自动生成方法的流程示意图;
图3为本申请实施例提供的一种代码自动生成过程中数据库的连接配置流程示意图;
图4为本申请实施例提供的一种代码自动生成过程中界面配置的流程示意图;
图5为本申请实施例提供的一种代码自动生成过程中数据源的加载显示流程示意图;
图6为本申请实施例提供的一种代码自动生成过程中自定义表名、列名的流程示意图;
图7为本申请实施例提供的一种代码自动生成器的模块结构示意图;
图8为本申请实施例提供的一种代码自动生成器的硬件结构示意图。
具体实施方式
下面结合本申请实施例中的附图对本申请实施例进行描述。
图1为本申请实施例提供的一种代码自动生成器的架构示意图。数据库是代码自动生成器的数据来源,通过统一的接口实现多数据库的兼容。数据库表信息包括表名、列名、表数据。数据库可以包括一个或多个数据库表,每个数据库表具有表名;每个数据库表可以包括一列或多列,每一列具有列名;每个数据库表可以包括0行、1行或多行。数据库可以包括多种数据库类型,例如Sqlserver、MySQL、SQLite、Oracle、PostgreSql和DB2等。代码自动生成器主要由两大功能模块组成:“从数据库生成”和“从模板生成”功能模块。从数据库生成该功能模块主要实现把数据库表中的表名和列名信息作为模板引擎的数据源,再结合内置的模板,利用NVelocity引擎生成代码文件。内置模板存放在~\Template\default目录下,模板后缀为.vm,可通过制作新模板并拷贝到该目录达到扩展该模块功能的目的。从模板生成该功能模块主要实现把数据库表里面的数据信息作为模板引擎的数据源,再结合模板或编辑模板,利用NVelocity引擎生成代码。该功能更灵活,相对的也对使用人员有更高的要求,使用人员需掌握VTL语言。配置文件主要是记录数据库连接和界面配置,目的是减少不必要的重复输入,提升用户体验。
本申请实施例提供的一种代码自动生成方法及代码自动生成器,可以根据保存的数据库的连接配置和界面配置,从数据库表中获取信息,利用模板自动生成代码,采用开源的模板引擎,模板语法相对容易学习,也易于扩展,不限制生成代码的编程语言,不限定技术。
需要说明的是,本申请实施例中,“多个”是指两个或两个以上,鉴于此,本申请实施例中也可以将“多个”理解为“至少两个”。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,字符“/”,如无特殊说明,一般表示前后关联对象是一种“或”的关系。
图2为本申请实施例提供的一种代码自动生成方法的流程示意图。其中:
S101、接收数据库的选择指令。
如图1所示,数据库具有多种类型,用户可以向代码自动生成器发送选择指令,代码自动生成器接收该选择指令,选择该选择指令所选择的一种数据库类型。
S102、根据所述选择指令获取目标数据库的连接配置。
S103、根据所述目标数据库的连接配置,连接所述目标数据库。
本实施例的代码自动生成器可以连接多个类型的数据库。可以根据预先的数据库的连接配置,连接用户选择的任一类型的目标数据库。连接配置包括名称、默认值、设置类型、是否显示、文件过滤器、是否可空等项。具体地,数据库的连接配置可以是以二进制的序列存储在配置文件中,例如,文件存储在~\ConnStrConfig目录下,每个数据库类型对应一个配置文件。
S104、获取所述目标数据库中的数据库表的信息。
数据库是代码自动生成器的数据来源,通过统一的接口实现多数据库的兼容。数据库表信息包括表名、列名、表数据。数据库可以包括一个或多个数据库表,每个数据库表具有表名;每个数据库表可以包括一列或多列,每一列具有列名;每个数据库表可以包括0行、1行或多行。
本申请的代码自动生成器有“从数据库生成”和“从模板生成”两个功能模块。获取数据库中的数据库表的信息,可以是把数据库表中的表名和列名信息作为模板引擎的数据源,也可以是把数据库表里面的数据信息作为模板引擎的数据源。
S105、获取生成代码的模板。
可以通过选择一个模板或编辑出一个模板来获取生成代码的模板。
因为采用的是模板的方式来生成代码,所以不受限于生成代码的编程语言,对程序来说任何编程语言的代码都是文本字符串。
S106、获取界面配置。
该界面配置可以是预先配置并保存的。获取存储的序列化的界面配置。
S107、根据所述界面配置,配置界面。
根据获取的界面配置,配置界面,并输出该界面配置,从而可以在自动生成代码过程中通过该界面进行显示和输入。
S108、在所述界面上运行模板引擎,根据所述数据库表的信息和所述模板生成代码文件。
运行模板引擎,可以将获取的数据库表的信息写入模板中,生成代码文件。
具体地,例如,把数据库表中的表名和列名信息作为模板引擎的数据源,运行模板引擎,就可以获取该表名和列名对应的数据信息生成对应的代码文件。可以根据一个表中的多个列对应的数据信息生成代码文件。
具体地,又例如,把数据库表里面的数据信息作为模板引擎的数据源,运行模板引擎,就可以根据一个表的数据信息生成对应的代码文件。
根据本申请实施例提供的一种代码自动生成方法,可以根据保存的数据库的连接配置和界面配置,从数据库表中获取信息,利用模板自动生成代码,采用开源的模板引擎,模板语法相对容易学习,也易于扩展,不限制生成代码的编程语言,编程语言指的是Java/C#/VB/Html/Js/Python等等,不限定技术。
对于图2所示的实施例,在一个实施例中,还进行数据库的连接配置。具体地,如图3所示的数据库连接配置流程示意图,在S101之前,还包括如下步骤:
S201、接收连接数据库的信息。
用户可以通过代码自动生成器的配置数据库连接信息的窗口,输入连接数据库的信息。例如,sqlite要输入Data Source、Version、Password。该窗口的主要功能是编辑、测试配置信息和保存数据库连接信息。它采用注入式的窗口设计,一个窗体就能完成所有数据库连接的配置。在现有的解决方案中,采用的是有多少个数据库类型就写多少种具体实现,本申请只用一种实现来兼容所有数据库。统一的数据库接口定义,定义了数据库操作接口和数据库架构信息获取接口。
S202、将所述信息填充到所述数据库的数据模型中。
数据库有多种类型,对应多个数据库的模型。根据用户选择的数据库类型,程序自动确定要使用的数据库的数据模型。
以sqlite为例,它的模型如下:
然后,将连接数据库的信息填充到数据库的模型中,通过注入的模型可以反射获取自定义特性,从而获取数据库类型和连接设置。连接设置包括名称、默认值、设置类型、是否显示、文件过滤器、是否可空等项。利用以上信息动态的在窗体上渲染对应控件,达到自适应数据库连接配置的效果。
S203、利用填充到所述模型中的信息拼接得到连接字符串。
利用填充到所述模型中的信息拼接得到连接字符串,从而利用所述连接字符串实例化数据库连接。
S204、测试所述数据库连接,如果测试通过,则进行到下一个步骤S205;否则,转到S201。
S205、将所述数据库的连接配置进行序列化。
S206、存储所述序列化后的所述数据库的连接配置,其中,一个数据库的类型对应一个数据库的连接配置。
其中,S205和S206为存储所述数据库的连接配置,即保存数据库连接配置到配置文件。具体地,数据库连接序列化是数据库连接保存和读取的过程。注入的数据模型填充好用户配置的设置后,该对象要存储起来,以便下次用户再次进入该数据库连接配置的时候直接加载成默认值,这样就可以减少用户重复输入。这里的模型序列化使用的是二进制序列化,文件存储在~\ConnStrConfig目录下,每个数据库类型对应一个配置文件。
对于图2所示的实施例,在另一个实施例中,还进行界面的配置。具体地,如图4所示,在S101之前,还包括如下步骤:
S301、接收用户的界面配置。
用户可以在代码自动生成器的界面上输入界面配置。所述界面配置包括以下一个或多个信息:数据库类型、是否自动加载数据库表、项目名称、测试人员。这些信息要保存起来,以便下次用户再次进入该界面的时候直接加载成默认值,这样就可以减少用户重复输入。
S302、将所述界面配置序列化。
界面配置序列化是用户在界面上输入的基本信息保存和读取的过程。这里的模型序列化使用的是XML序列化,从数据库生成的界面配置文件存储在~\DatabaseConfig\Config.xml中,从模板生成的界面配置存储在~\TemplateConfig\Config.xml中。
S303、存储所述序列化后的界面配置。
对于图2所示的实施例,在又一个实施例中,在S102之后,还包括数据源的加载显示。数据源加载显示是通过用户配置的数据库连接连接数据库,读取数据库中的所有数据库表并展示到界面控件。具体地,如图5所示,在S102之后,以及S103之前,还包括如下步骤:
S401、检查内置模板目录。若不存在该模板目录就创建模板目录。
S402、读取内置模板列表。
S403、显示内置模板列表到界面上的控件。
其中,代码自动生成器如果是从模板生成代码,则不存在S402和S403。
S404、读取界面配置文件Config.xml。如果读取到该界面配置文件,则进行到S405;如果该文件不存在就默认初始化,结束流程。
S405、反序列化界面配置文件。
具体地,XML反序列化Config.xml为数据模型。
S406、用模型的值填充界面编辑控件。
S407、以模型中‘是否自动加载数据库表’判断是否加载。如果加载,则进行到S408;如果不自动加载则界面加载过程结束。
S408、判断数据库连接配置文件是否存在。如果存在,则进行到S409;如果不存在则界面加载过程结束。
S409、二进制反序列化数据库连接配置文件为数据模型。
S410、从模型中获取数据库连接信息,并初始化连接实例,连接数据库。如果获取到数据库连接,则进行到S411;如果连接失败,则打开连接配置窗口,让用户输入。
S411、连接信息全局缓存。
即缓存数据库连接模型。
S412、加载数据库表到界面。
对于图2所示的实施例,在又一个实施例中,还可以自定义表名、列名。自定义表名、列名是“从模板生成”中的一个功能。它是为了配合模板对数据源的要求,从而增加表名、列名自定义命名窗口。用户选择表名后,程序按表名查询它的列名列表,并把数据封装成对象传递给自定义命名窗口。窗口内有程序逻辑自动把对象渲染在界面上,此时用户就可以通过界面自定义表名、列名了。具体地,如图6所示,所述方法还包括如下步骤:
S501、根据自定义的表名,获取数据库表。
具体地,用户选择一个数据库表。
S502、按表名查询列名。
程序按选择的表名查询这个表的列名列表。
S503、将查找到的所述数据库表的列名封装成模型对象。
把列名列表封装成FrameInfo模型对象。
S504、传递所述模型对象到自定义命名窗口。
把该模型对象传递到自定义命名窗口。
S505、将所述模型对象渲染到所述自定义命名窗口上。
自定义命名窗口的加载方法把模型对象渲染到界面上。
S506、接收对所述列名的修改。
用户通过界面可以修改表名、列名。
S507、确认修改与否,如果是,则进行到S508;否则,结束流程。
用户确认修改。如果用户关闭窗口,则结束过程。
S508、返回映射关系对象。
返回修改后的FrameInfo模型对象。
S509、显示到模板数据列表,保存修改后的模型对象。
“从模板生成”本质是把表里面的数据变成代码,而现有的解决方案只有“从数据库生成”功能,即把表结构变成代码。
本申请的实现原理是依托数据库表信息(结构、数据)利用模板引擎实现代码自动生成。
本申请的方案有以下优点:
1.使用模板来实现功能,不受生成代码的编程语言限制,可以生成各语言代码,具有良好的扩展性,不需要修改程序或者扩展组件。
2.有两种生成模式:从数据库生成、从模板生成,覆盖各种实际情况。
3.统一数据库接口,兼容多种数据库。
4.使用注入式窗口配置数据库连接,在数据模型上使用特性标签就能实现功能,方便了程序员进行编码扩展。
5.提供模板编辑范例以及数据源提示信息,减小模板编辑难度。
6.提供拖拽操作增强用户体验。
7.提供记忆功能,避免每次重复配置数据库连接、输入基础信息。
上面描述了本申请的代码自动生成方法,下面描述代码自动生成器。
图7为本申请实施例提供的一种代码自动生成器的模块结构示意图。该代码自动生成器1000的架构如图1所示。该代码自动生成器1000包括:第一接收单元11、第一获取单元12、连接单元13、第二获取单元14、第三获取单元15、第四获取单元16、配置单元17和生成单元18。其中:
第一接收单元11,用于接收数据库的选择指令;
第一获取单元12,用于根据所述选择指令获取目标数据库的连接配置;
连接单元13,用于根据所述目标数据库的连接配置,连接所述目标数据库;
第二获取单元14,用于获取所述目标数据库中的数据库表的信息;
第三获取单元15,用于获取生成代码的模板;
第四获取单元16,用于获取界面配置;
配置单元17,用于根据所述界面配置,配置界面;
生成单元18,用于在所述界面上运行模板引擎,根据所述数据库表的信息和所述模板生成代码文件。
在一个实现方式中,所述代码自动生成器还包括:第二接收单元,用于接收连接数据库的信息;填充单元,用于将所述信息填充到所述数据库的数据模型中;拼接单元,用于利用填充到所述数据模型中的信息拼接得到连接字符串;测试单元,用于测试所述数据库连接;以及第一存储单元,用于存储所述数据库的连接配置。
在另一个实现方式中,所述第一存储单元用于将所述数据库的连接配置进行序列化;以及存储所述序列化后的所述数据库的连接配置,其中,一个数据库的类型对应一个数据库的连接配置。
在又一个实现方式中,所述代码自动生成器还包括:第三接收单元,用于接收用户的界面配置,所述界面配置包括以下一个或多个信息:数据库类型、是否自动加载数据库表、项目名称、测试人员;将所述界面配置序列化;以及第二存储单元,用于存储所述序列化后的界面配置。
在又一个实现方式中,所述生成单元用于在所述界面上运行模板引擎,利用所述数据库表中的数据信息作为所述模板的数据源,利用所述模板生成代码文件。
在又一个实现方式中,所述代码自动生成器还包括:第五获取单元,用于根据自定义的表名,获取数据库表;封装单元,用于将查找到的所述数据库表的列名封装成模型对象;渲染单元,用于将所述模型对象渲染到自定义命名窗口上;修改单元,用于在所述自定义命名窗口上接收对所述列名的修改;以及保存单元,用于保存修改后的模型对象。
在又一个实现方式中,所述生成单元用于在所述界面上运行模板引擎,利用所述数据库中的表名和列名作为所述模块的数据源,利用所述模板生成代码文件。
根据本申请实施例提供的一种代码自动生成器,可以根据保存的数据库的连接配置和界面配置,从数据库表中获取信息,利用模板自动生成代码,采用开源的模板引擎,模板语法相对容易学习,也易于扩展,不限制生成代码的编程语言,不限定技术。
图8为本申请实施例提供的一种代码自动生成器的硬件结构示意图。该代码自动生成器2000可以包括:输入装置21、输出装置22、存储器23和处理器24。存储器23用于存储计算机程序,计算机程序包括程序指令,处理器24用于执行存储器23存储的程序指令。其中,处理器24被配置用于调用程序指令执行如下步骤:
接收数据库的选择指令;
根据所述选择指令获取目标数据库的连接配置;
根据所述目标数据库的连接配置,连接所述目标数据库;
获取所述目标数据库中的数据库表的信息;
获取生成代码的模板;
获取界面配置;
根据所述界面配置,配置界面;
在所述界面上运行模板引擎,根据所述数据库表的信息和所述模板生成代码文件。
在一个实现方式中,所述处理器24还用于执行如下步骤:接收连接数据库的信息;将所述信息填充到所述数据库的数据模型中;利用填充到所述数据模型中的信息拼接得到连接字符串;测试所述数据库连接;以及存储所述数据库的连接配置。
在另一个实现方式中,所述处理器24执行所述存储所述数据库的连接配置的步骤,包括:将所述数据库的连接配置进行序列化;以及存储所述序列化后的所述数据库的连接配置,其中,一个数据库的类型对应一个数据库的连接配置。
在又一个实现方式中,所述处理器24还用于执行如下步骤:接收用户的界面配置,所述界面配置包括以下一个或多个信息:数据库类型、是否自动加载数据库表、项目名称、测试人员;将所述界面配置序列化;以及存储所述序列化后的界面配置。
在又一个实现方式中,所述处理器24执行所述在所述界面上运行模板引擎,根据所述数据库表的信息和所述模板生成代码文件的步骤,包括:在所述界面上运行模板引擎,利用所述数据库表中的数据信息作为所述模板的数据源,利用所述模板生成代码文件。
在又一个实现方式中,所述处理器24还用于执行如下步骤:根据自定义的表名,获取数据库表;将查找到的所述数据库表的列名封装成模型对象;将所述模型对象渲染到自定义命名窗口上;在所述自定义命名窗口上接收对所述列名的修改;以及保存修改后的模型对象。
在又一个实现方式中,所述处理器24执行所述在所述界面上运行模板引擎,根据所述数据库表的信息和所述模板生成代码文件的步骤,包括:在所述界面上运行模板引擎,利用所述数据库中的表名和列名作为所述模块的数据源,利用所述模板生成代码文件。
应当理解,在本申请实施例中,所称处理器24可以是中央处理单元(CentralProcessing Unit,CPU),该处理器还可以是其他通用处理器、数字信号处理器(DigitalSignal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
输出装置22用于输出数据,输入装置21用于输入数据。
该存储器23可以包括只读存储器和随机存取存储器,并向处理器24提供指令和数据。存储器23的一部分还可以包括非易失性随机存取存储器。例如,存储器23还可以存储设备类型的信息。
具体实现中,本申请实施例中所描述的处理器24、输出装置22和输入装置21可执行本申请实施例图2~图6提供的一种代码自动生成方法的实施例,在此不再赘述。
根据本申请实施例提供的一种代码自动生成器,可以根据保存的数据库的连接配置和界面配置,从数据库表中获取信息,利用模板自动生成代码,采用开源的模板引擎,模板语法相对容易学习,也易于扩展,不限制生成代码的编程语言,不限定技术。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、代码自动生成器和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、代码自动生成器和方法,可以通过其它的方式实现。例如,该单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。所显示或讨论的相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,代码自动生成器或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。该计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行该计算机程序指令时,全部或部分地产生按照本申请实施例的流程或功能。该计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程代码自动生成器。该计算机指令可以存储在计算机可读存储介质中,或者通过该计算机可读存储介质进行传输。该计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(digital subscriber line,DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。该计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。该可用介质可以是只读存储器(read-only memory,ROM),或随机存储存储器(random access memory,RAM),或磁性介质,例如,软盘、硬盘、磁带、磁碟、或光介质,例如,数字通用光盘(digital versatile disc,DVD)、或者半导体介质,例如,固态硬盘(solid state disk,SSD)等。
Claims (10)
1.一种代码自动生成方法,其特征在于,所述方法包括:
接收数据库的选择指令;
根据所述选择指令获取目标数据库的连接配置;
根据所述目标数据库的连接配置,连接所述目标数据库;
获取所述目标数据库中的数据库表的信息;
获取生成代码的模板;
获取界面配置;
根据所述界面配置,配置界面;
在所述界面上运行模板引擎,根据所述数据库表的信息和所述模板生成代码文件。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
接收连接数据库的信息;
将所述信息填充到所述数据库的数据模型中;
利用填充到所述数据模型中的信息拼接得到连接字符串;
测试所述数据库连接;
存储所述数据库的连接配置。
3.根据权利要求2所述的方法,其特征在于,所述存储所述数据库的连接配置,包括:
将所述数据库的连接配置进行序列化;
存储所述序列化后的所述数据库的连接配置,其中,一个数据库的类型对应一个数据库的连接配置。
4.如权利要求1所述的方法,其特征在于,所述方法还包括:
接收用户的界面配置,所述界面配置包括以下一个或多个信息:数据库类型、是否自动加载数据库表、项目名称、测试人员;
将所述界面配置序列化;
存储所述序列化后的界面配置。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
根据自定义的表名,获取数据库表;
将查找到的所述数据库表的列名封装成模型对象;
将所述模型对象渲染到自定义命名窗口上;
在所述自定义命名窗口上接收对所述列名的修改;
保存修改后的模型对象。
6.根据权利要求5所述的方法,其特征在于,所述在所述界面上运行模板引擎,根据所述数据库表的信息和所述模板生成代码文件,包括:
在所述界面上运行模板引擎,利用所述数据库中的表名和列名作为所述模块的数据源,利用所述模板生成代码文件。
7.根据权利要求2~4任一项所述的方法,其特征在于,所述在所述界面上运行模板引擎,根据所述数据库表的信息和所述模板生成代码文件,包括:
在所述界面上运行模板引擎,利用所述数据库表中的数据信息作为所述模板的数据源,利用所述模板生成代码文件。
8.一种代码自动生成器,其特征在于,所述代码自动生成器包括:
第一接收单元,用于接收数据库的选择指令;
第一获取单元,用于根据所述选择指令获取目标数据库的连接配置;
连接单元,用于根据所述目标数据库的连接配置,连接所述目标数据库;
第二获取单元,用于获取所述目标数据库中的数据库表的信息;
第三获取单元,用于获取生成代码的模板;
第四获取单元,用于获取界面配置;
配置单元,用于根据所述界面配置,配置界面;
生成单元,用于在所述界面上运行模板引擎,根据所述数据库表的信息和所述模板生成代码文件。
9.一种代码自动生成器,其特征在于,包括处理器、输入设备、输出设备和存储器,其中,所述存储器用于存储计算机程序,所述计算机程序包括程序指令,所述处理器被配置用于调用所述程序指令,执行如权利要求1-7中任一项所述的方法。
10.一种计算机存储介质,其特征在于,所述计算机存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时,执行如权利要求1-7中任一项所述的方法。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN201910075242.XA CN109885291A (zh) | 2019-01-25 | 2019-01-25 | 一种代码自动生成方法及代码自动生成器 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN201910075242.XA CN109885291A (zh) | 2019-01-25 | 2019-01-25 | 一种代码自动生成方法及代码自动生成器 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| CN109885291A true CN109885291A (zh) | 2019-06-14 |
Family
ID=66926946
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| CN201910075242.XA Pending CN109885291A (zh) | 2019-01-25 | 2019-01-25 | 一种代码自动生成方法及代码自动生成器 |
Country Status (1)
| Country | Link |
|---|---|
| CN (1) | CN109885291A (zh) |
Cited By (16)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN110580159A (zh) * | 2019-09-16 | 2019-12-17 | 上海巨灵信息技术股份有限公司 | 一种软件代码自动生成方法及系统 |
| CN110837363A (zh) * | 2019-11-05 | 2020-02-25 | 北京锐安科技有限公司 | 代码文件的生成方法、装置、设备和介质 |
| CN111061475A (zh) * | 2019-12-13 | 2020-04-24 | 中国南方电网有限责任公司 | 软件代码生成方法、装置、计算机设备和存储介质 |
| CN111198680A (zh) * | 2019-12-20 | 2020-05-26 | 江苏原力动画制作股份有限公司 | 一种基于Arnold渲染器的文件生成系统及方法 |
| CN111427567A (zh) * | 2020-03-20 | 2020-07-17 | 杭州涂鸦信息技术有限公司 | 一种智能产品快速生成方法及其系统和设备 |
| CN111562908A (zh) * | 2020-04-15 | 2020-08-21 | 北京明略软件系统有限公司 | 一种代码生成方法和装置 |
| CN111580794A (zh) * | 2020-05-06 | 2020-08-25 | 山东浪潮通软信息科技有限公司 | 业务管理系统中业务单据创建方法和装置 |
| CN111752565A (zh) * | 2020-06-30 | 2020-10-09 | 深圳壹账通智能科技有限公司 | 一种界面生成方法、装置、计算机设备及可读存储介质 |
| CN111796810A (zh) * | 2020-07-03 | 2020-10-20 | 福建天晴在线互动科技有限公司 | 一种可配置化快速生成Mysql数据库代码的方法及其系统 |
| CN113296760A (zh) * | 2021-05-25 | 2021-08-24 | 深信服科技股份有限公司 | 模型代码的生成方法、计算机设备及可读存储介质 |
| CN113448956A (zh) * | 2020-03-24 | 2021-09-28 | 腾讯科技(深圳)有限公司 | 基于数据模型的代码生成方法、装置、设备及存储介质 |
| CN113535141A (zh) * | 2020-04-16 | 2021-10-22 | 浙江大搜车软件技术有限公司 | 数据库操作代码的生成方法及装置 |
| TWI757743B (zh) * | 2019-09-17 | 2022-03-11 | 開曼群島商創新先進技術有限公司 | 小程式產生方法以及裝置 |
| CN114385635A (zh) * | 2021-12-31 | 2022-04-22 | 北京北信源软件股份有限公司 | 一种多源数据存储方法、装置、电子设备及存储介质 |
| CN114428648A (zh) * | 2022-01-25 | 2022-05-03 | 上海中通吉网络技术有限公司 | 测试工具低代码配置生成方法 |
| CN114741070A (zh) * | 2022-04-12 | 2022-07-12 | 中国联合网络通信集团有限公司 | 代码生成方法、装置、电子设备及存储介质 |
Citations (5)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN103412749A (zh) * | 2013-07-29 | 2013-11-27 | 福建联迪商用设备有限公司 | 一种基于关系型数据库的代码生成方法及代码生成器 |
| CN104317576A (zh) * | 2014-07-04 | 2015-01-28 | 北京思特奇信息技术股份有限公司 | 一种基于eclipse的代码自动生成方法及系统 |
| CN106873974A (zh) * | 2016-12-30 | 2017-06-20 | 武汉默联股份有限公司 | 智能代码生成引擎系统及方法 |
| CN107357588A (zh) * | 2017-07-19 | 2017-11-17 | 万帮充电设备有限公司 | 目标代码生成方法及装置 |
| CN107729003A (zh) * | 2017-11-20 | 2018-02-23 | 江苏神州信源系统工程有限公司 | 代码的自动生成方法、装置及电子设备 |
-
2019
- 2019-01-25 CN CN201910075242.XA patent/CN109885291A/zh active Pending
Patent Citations (5)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN103412749A (zh) * | 2013-07-29 | 2013-11-27 | 福建联迪商用设备有限公司 | 一种基于关系型数据库的代码生成方法及代码生成器 |
| CN104317576A (zh) * | 2014-07-04 | 2015-01-28 | 北京思特奇信息技术股份有限公司 | 一种基于eclipse的代码自动生成方法及系统 |
| CN106873974A (zh) * | 2016-12-30 | 2017-06-20 | 武汉默联股份有限公司 | 智能代码生成引擎系统及方法 |
| CN107357588A (zh) * | 2017-07-19 | 2017-11-17 | 万帮充电设备有限公司 | 目标代码生成方法及装置 |
| CN107729003A (zh) * | 2017-11-20 | 2018-02-23 | 江苏神州信源系统工程有限公司 | 代码的自动生成方法、装置及电子设备 |
Non-Patent Citations (1)
| Title |
|---|
| 张季谦等: "《网页设计与制作》", 31 January 2017, 中国科学技术大学出版社 * |
Cited By (19)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN110580159A (zh) * | 2019-09-16 | 2019-12-17 | 上海巨灵信息技术股份有限公司 | 一种软件代码自动生成方法及系统 |
| TWI757743B (zh) * | 2019-09-17 | 2022-03-11 | 開曼群島商創新先進技術有限公司 | 小程式產生方法以及裝置 |
| CN110837363A (zh) * | 2019-11-05 | 2020-02-25 | 北京锐安科技有限公司 | 代码文件的生成方法、装置、设备和介质 |
| CN111061475A (zh) * | 2019-12-13 | 2020-04-24 | 中国南方电网有限责任公司 | 软件代码生成方法、装置、计算机设备和存储介质 |
| CN111061475B (zh) * | 2019-12-13 | 2023-12-12 | 中国南方电网有限责任公司 | 软件代码生成方法、装置、计算机设备和存储介质 |
| CN111198680A (zh) * | 2019-12-20 | 2020-05-26 | 江苏原力动画制作股份有限公司 | 一种基于Arnold渲染器的文件生成系统及方法 |
| CN111198680B (zh) * | 2019-12-20 | 2020-12-11 | 江苏原力数字科技股份有限公司 | 一种基于 Arnold 渲染器的文件生成系统及方法 |
| CN111427567A (zh) * | 2020-03-20 | 2020-07-17 | 杭州涂鸦信息技术有限公司 | 一种智能产品快速生成方法及其系统和设备 |
| CN111427567B (zh) * | 2020-03-20 | 2023-08-18 | 杭州涂鸦信息技术有限公司 | 一种智能产品快速生成方法及其系统和设备 |
| CN113448956A (zh) * | 2020-03-24 | 2021-09-28 | 腾讯科技(深圳)有限公司 | 基于数据模型的代码生成方法、装置、设备及存储介质 |
| CN111562908A (zh) * | 2020-04-15 | 2020-08-21 | 北京明略软件系统有限公司 | 一种代码生成方法和装置 |
| CN113535141A (zh) * | 2020-04-16 | 2021-10-22 | 浙江大搜车软件技术有限公司 | 数据库操作代码的生成方法及装置 |
| CN111580794A (zh) * | 2020-05-06 | 2020-08-25 | 山东浪潮通软信息科技有限公司 | 业务管理系统中业务单据创建方法和装置 |
| CN111752565A (zh) * | 2020-06-30 | 2020-10-09 | 深圳壹账通智能科技有限公司 | 一种界面生成方法、装置、计算机设备及可读存储介质 |
| CN111796810A (zh) * | 2020-07-03 | 2020-10-20 | 福建天晴在线互动科技有限公司 | 一种可配置化快速生成Mysql数据库代码的方法及其系统 |
| CN113296760A (zh) * | 2021-05-25 | 2021-08-24 | 深信服科技股份有限公司 | 模型代码的生成方法、计算机设备及可读存储介质 |
| CN114385635A (zh) * | 2021-12-31 | 2022-04-22 | 北京北信源软件股份有限公司 | 一种多源数据存储方法、装置、电子设备及存储介质 |
| CN114428648A (zh) * | 2022-01-25 | 2022-05-03 | 上海中通吉网络技术有限公司 | 测试工具低代码配置生成方法 |
| CN114741070A (zh) * | 2022-04-12 | 2022-07-12 | 中国联合网络通信集团有限公司 | 代码生成方法、装置、电子设备及存储介质 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| CN109885291A (zh) | 一种代码自动生成方法及代码自动生成器 | |
| CN102542002B (zh) | 一种卫星遥测数据处理系统以及其实现方法 | |
| CN112256321A (zh) | 静态库打包方法、装置、计算机设备和存储介质 | |
| CN107451663A (zh) | 算法组件化、基于算法组件建模方法、装置以及电子设备 | |
| CN112015501A (zh) | 可视化页面生成方法、装置、计算机设备和存储介质 | |
| CN107015804A (zh) | 一种通过配置api快速开发项目的方法及系统 | |
| CN109408375A (zh) | 接口文档的生成方法和装置 | |
| US20120159408A1 (en) | Implementation of factor graphs | |
| CN111353235A (zh) | 一种基于模型驱动的组件端口建模方法及终端 | |
| CN116738954A (zh) | 报表导出方法、报表模板的配置方法、装置、计算机设备 | |
| White et al. | Tincr—A custom CAD tool framework for Vivado | |
| CN115129392A (zh) | 芯片配置方法、装置、计算机设备和存储介质 | |
| CN119476420A (zh) | 神经网络模型构建方法、装置、计算机设备和存储介质 | |
| CN109522213A (zh) | 一种基于自定义测试脚本的测试方法及装置 | |
| WO2018058612A1 (zh) | 配置方法及系统 | |
| CN114185554B (zh) | 软件产品部署方法、装置、可读介质及电子设备 | |
| CN112749216B (zh) | 基于规则解析的数据导入方法、装置及设备 | |
| WO2020133324A1 (zh) | 人工智能应用的搭建、运行实现方法、装置和机器设备 | |
| US7552405B1 (en) | Methods of implementing embedded processor systems including state machines | |
| CN110489731A (zh) | 一种表单的创建方法、装置及计算机存储介质 | |
| CN111712791B (zh) | 人工智能应用搭建中新增组块的方法、装置和机器设备 | |
| CN114328467A (zh) | 数据库交互方法、装置设备及存储介质 | |
| CN117709400A (zh) | 层次化系统、运算方法、运算装置、电子设备及存储介质 | |
| CN112783996A (zh) | 一种前端批量合成自定义地图标签的方法 | |
| CN113342399A (zh) | 应用项目的结构配置方法、装置及可读存储介质 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| PB01 | Publication | ||
| PB01 | Publication | ||
| SE01 | Entry into force of request for substantive examination | ||
| SE01 | Entry into force of request for substantive examination | ||
| RJ01 | Rejection of invention patent application after publication | ||
| RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190614 |