CN114217783A - 一种生成代码的方法、装置及终端设备 - Google Patents

一种生成代码的方法、装置及终端设备 Download PDF

Info

Publication number
CN114217783A
CN114217783A CN202111327076.1A CN202111327076A CN114217783A CN 114217783 A CN114217783 A CN 114217783A CN 202111327076 A CN202111327076 A CN 202111327076A CN 114217783 A CN114217783 A CN 114217783A
Authority
CN
China
Prior art keywords
code
variable
configuration information
template
built
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
Application number
CN202111327076.1A
Other languages
English (en)
Inventor
曾昭志
张志波
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shenzhen Kemai Technology Co ltd
Original Assignee
Shenzhen Kemai Technology Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shenzhen Kemai Technology Co ltd filed Critical Shenzhen Kemai Technology Co ltd
Priority to CN202111327076.1A priority Critical patent/CN114217783A/zh
Publication of CN114217783A publication Critical patent/CN114217783A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/35Creation or generation of source code model driven
    • G06F8/355Round-trip engineering
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Stored Programmes (AREA)

Abstract

本申请适用于计算机技术领域,提供了一种生成代码的方法、装置及终端设备,所述方法包括:接收代码生成请求;代码生成请求携带有待生成代码对应的模板信息和配置信息,以及与待生成代码对应的数据库;根据模板信息确定待生成代码的目标代码模板;根据数据库和所述配置信息构建内置变量;根据目标代码模板和内置变量生成目标代码。本申请实施例提供的生成代码的方法可以针对待生成代码对应的模板信息确定不同的目标代码模板,即目标代码类型的多样化,同时还可以根据构建的内置变量满足待生成代码的不同要求,提高了代码生成的扩展能力以及代码质量。

Description

一种生成代码的方法、装置及终端设备
技术领域
本申请属于计算机技术领域,尤其涉及一种生成代码的方法、装置、终端设备及计算机可读存储介质。
背景技术
目前,随着互联网的快速发展,人们的生活已经和各种应用软件息息相关。为了提高应用软件的开发效率,新的方式可以用一个开发软件来自动或半自动地生成应用软件的代码,并在生成的代码的基础上配置相应的业务数据以实现特定的业务功能。
然而,现有技术通常只能实现一种类型的代码生成,不能进行灵活的配置,即生成的代码类型固定且代码生成的扩展能力差。
发明内容
本申请实施例提供了一种生成代码的方法、装置、终端设备及计算机可读存储介质,可以解决现有技术存在的生成的代码类型固定且代码生成的扩展能力差的问题。
第一方面,本申请实施例提供了一种生成代码的方法,包括:
接收代码生成请求;所述代码生成请求携带有待生成代码对应的模板信息和配置信息,以及与所述待生成代码对应的数据库;
根据所述模板信息确定所述待生成代码的目标代码模板;
根据所述数据库和所述配置信息构建内置变量;
根据所述目标代码模板和所述内置变量生成目标代码。
可选的,所述配置信息包括项目配置信息、表元配置信息以及表结构配置信息;所述根据所述数据库和所述配置信息构建内置变量,包括:
根据所述数据库和所述项目配置信息构建第一层内置变量;
根据所述数据库和所述表元配置信息构建第二层内置变量;
根据所述数据库和所述表结构配置信息构建第三层内置变量。
可选的,所述根据所述数据库和所述表元配置信息构建第二层内置变量之后,还包括:
当检测到所述数据库中的预设表配置信息中存在特殊字段信息时,根据所述特殊字段信息对所述第二层内置变量进行补充。
可选的,所述第三层内置变量包括字段变量、唯一索引变量及主键变量;所述根据所述数据库和所述表结构配置信息构建第三层内置变量,包括:
根据所述数据库中的预设表配置信息和所述表结构配置信息中的字段的第一元数据构建所述字段变量;所述第一元数据包括字段名、注释、数据类型、长度和/或主键标识;
根据所述预设表配置信息和所述表结构配置信息中的唯一索引的第二元数据构建所述唯一索引变量;所述第二元数据包括索引名、所述注释和/或字段列表;
根据所述预设表配置信息和所述表结构配置信息中的所述第一元数据构建所述主键变量。
可选的,所述根据所述数据库和所述表结构配置信息构建第三层内置变量之后,还包括:
分别在所述字段变量、所述唯一索引变量及所述主键变量中添加对象名变量。
可选的,所述根据所述目标代码模板和所述内置变量生成目标代码,包括:
根据所述项目配置信息确定所述待生成代码的目标生成范围;
当检测到所述目标生成范围与所述目标代码模板的生成范围相符时,根据所述目标代码模板、所述第一层内置变量、所述第二层内置变量及所述第三层内置变量生成所述目标代码。
可选的,所述根据所述模板信息确定所述待生成代码的目标代码模板之前,还包括:
获取历史代码;
根据内置变量库对所述历史代码中的可变部分进行替换,得到代码模板。
第二方面,本申请实施例提供了一种生成代码的装置,包括:
接收单元,用于接收代码生成请求;所述代码生成请求携带有待生成代码对应的模板信息和配置信息,以及与所述待生成代码对应的数据库;
模板确定单元,用于根据所述模板信息确定所述待生成代码的目标代码模板;
变量构建单元,用于根据所述数据库和所述配置信息构建内置变量;
第一生成单元,用于根据所述目标代码模板和所述内置变量生成目标代码。
第三方面,本申请实施例提供了一种终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,上述处理器执行所述计算机程序时实现如上述第一方面中任一项所述的生成代码的方法的步骤。
第四方面,本申请实施例提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如上述第一方面中任一项所述的生成代码的方法的步骤。
第五方面,本申请实施例提供了一种计算机程序产品,当计算机程序产品在终端设备上运行时,使得终端设备可执行上述第一方面中任一项所述的生成代码的方法。
本申请实施例与现有技术相比存在的有益效果是:
本申请实施例提供的一种生成代码的方法,通过接收到的携带有待生成代码对应的模板信息和配置信息,以及与待生成代码对应的数据库的代码生成请,可以根据上述特征信息确定目标代码模板,根据数据库和配置信息构建内置变量,最后根据目标代码模板和内置变量生成目标代码。本申请实施例提供的生成代码的方法可以针对待生成代码对应的模板信息确定不同的目标代码模板,即目标代码类型的多样化,同时还可以根据构建的内置变量满足待生成代码的不同要求,提高了代码生成的扩展能力以及代码质量。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请一实施例提供的生成代码的方法的实现流程图;
图2是本申请一实施例提供的用户发送代码生成请求时的应用场景的示意图;
图3是本申请一实施例提供的内置变量的树形结构图;
图4是本申请一实施例提供的生成代码的方法中S103的具体实现流程图;
图5是本申请另一实施例提供的生成代码的方法的实现流程图;
图6是本申请一实施例提供的生成代码的方法中S104的具体实现流程图;
图7是本申请再一实施例提供的生成代码的方法的实现流程图;
图8是本申请一实施例提供的生成代码的装置的结构示意图;
图9是本申请一实施例提供的终端设备的结构示意图。
具体实施方式
以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本申请实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本申请。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本申请的描述。
应当理解,当在本申请说明书和所附权利要求书中使用时,术语“包括”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在本申请说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
如在本申请说明书和所附权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。
另外,在本申请说明书和所附权利要求书的描述中,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
在本申请说明书中描述的参考“一个实施例”或“一些实施例”等意味着在本申请的一个或多个实施例中包括结合该实施例描述的特定特征、结构或特点。由此,在本说明书中的不同之处出现的语句“在一个实施例中”、“在一些实施例中”、“在其他一些实施例中”、“在另外一些实施例中”等不是必然都参考相同的实施例,而是意味着“一个或多个但不是所有的实施例”,除非是以其他方式另外特别强调。术语“包括”、“包含”、“具有”及它们的变形都意味着“包括但不限于”,除非是以其他方式另外特别强调。
请参阅图1,图1是本申请一实施例提供的生成代码的方法的实现流程图。本申请一实施例提供的生成代码的方法的执行主体为终端设备。其中,终端设备可以是智能手机、平板电脑或台式电脑等。
如图1所示,本申请一实施例提供的生成代码的方法可以包括S101~S104,详述如下:
在S101中,接收代码生成请求;所述代码生成请求携带有待生成代码对应的模板信息和配置信息,以及与所述待生成代码对应的数据库。
本申请实施例中,当用户需要通过终端设备生成自己所需的目标代码时,可以触发代码生成请求。
在实际应用中,用户在发送代码生成请求时,需要对数据库信息(待生成代码对应的数据库)和生成代码的信息(如待生成代码对应的模板信息和配置信息)进行设置,以便生成携带有待生成代码对应的模板信息和配置信息,以及与待生成代码对应的数据库的代码生成请求。
需要说明的是,用户在确定待生成代码对应的数据库之前,还需要确定数据源是否有效。其中,数据源用于表征可以连接到实际数据库的一条路径。
示例性的,用户在通过终端设备进入与代码生成相关的应用程序的应用界面后,可以在如图2中的(a)所示的终端设备的设置界面中的信息栏201中填写用户信息(如用户名和密码)和数据源信息(如IP地址和端口号),用户在完成信息填写后,可以点击该设置界面中的测试链接控件202。终端设备响应于用户点击测试链接控件202的操作,对该数据源信息对应的链接进行测试。终端设备在检测到该数据源有效时,可以显示第一提示信息203,以提示用户测试成功。基于此,用户可以点击该设置界面中的保存控件204,以得到如图2中的(b)所示的数据库列表205。
用户可以在如图2中的(b)所示的数据库列表205中点击数据库2051,则终端设备可以确定待生成代码对应的数据库即为数据库2051。此时,终端设备可以响应于用户点击数据库2051的操作,显示如图2中的(c)的项目信息表206。用户可以在该项目信息表206中完成信息填写(如项目说明和代码模板等),即项目配置信息。
需要说明的是,用户在确定代码模板时,可以点击项目信息表206中的代码模板控件2061。终端设备响应于用户点击代码模板控件2061的操作,可以显示包括多个预设代码模板的模板选择列表207,以供用户选择。此时,用户可以在模板选择列表207中点击代码模板2071,则终端设备可以确定待生成代码的目标代码模板为代码模板2071。此时,终端设备可以根据用户点击代码模板2071的操作生成待生成代码对应的模板信息。
在实际应用中,当用户想要进一步了解模板选择列表207中的多个预设代码模板的信息时,终端设备还可以提供模板管理选项,如图2中的(d)所示,可以在选项栏208模板管理控件2081,用户可以点击模板管理控件2081。终端设备响应于用户点击模板管理控件2081的操作,显示包括多个预设代码模板的模板信息表209。(模板信息表209可以包括各个预设代码模板的ID号、模板名称及模板说明等。)
在本申请的一个实施例中,如图2中的(c)所示,当用户完成项目信息表206的信息填写,且无需对数据库表结构中的部分属性信息进行自定义设置时,用户可以直接点击快速生成代码控件2010。
需要说明的是,数据库表结构中的全部属性信息可以直接根据待生成代码对应的数据库自动关联得到,即预设表配置信息。因此,终端设备可以将该预设表配置信息和之前的项目配置信息确定为待生成代码的配置信息。
终端设备在检测到用户点击快速生成代码控件2010的操作时,可以确定用户发送了代码快速生成请求,并接收携带有待生成代码对应的模板信息和配置信息,以及与待生成代码对应的数据库的代码快速生成请求。
在本申请的另一个实施例中,如图2中的(c)所示,当用户完成项目信息表206的信息填写后,用户还想要对数据库表结构进行自定义设置时,用户可以点击保存控件2011。终端设备响应于用户点击保存控件2011的操作,显示如图2中的(e)所示的表结构信息表2012。
本实施例中,由于用户在之前已经选择了待生成代码对应的数据库,因此,该数据库表结构中的信息可以根据待生成代码对应的数据库自动关联得到,即预设表配置信息。同时,用户还可以根据待生成代码的生成要求对数据库表结构中的部分属性进行自定义设置。
如图2中的(e)所示,用户在完成对表结构信息表2012的信息填写后,可以点击保存控件2013,以发送代码生成请求。此时,终端设备可以将上述预设表配置信息、自定义设置的部分属性信息以及之前的项目配置信息确定为待生成代码的配置信息。
终端设备在检测到用户点击保存控件2013的操作时,可以确定用户发送了代码生成请求,并接收携带有待生成代码对应的模板信息和配置信息,以及与待生成代码对应的数据库的代码生成请求。
需要说明的是,终端设备在接收到上述代码生成请求或代码快速生成请求后,均可以执行步骤S102~S104。
在S102中,根据所述模板信息确定所述待生成代码的目标代码模板。
本申请实施例中,模板信息可以是代码模板的模板名称、也可以代码模板的ID。
需要说明的是,终端设备可以预先存储有预设模板信息与预设代码模板之间的对应关系。其中,预设代码模板类型包括全部代码模板、动态代码模块及框架代码模板。全部代码模板的内容包含动态代码和框架代码。动态代码指配置信息中存在用户自定义设置的部分属性信息,针对用户自定义设置的部分属性信息生成的变化代码。框架代码指除动态代码以外的不变代码。
每个预设代码模板可以包括多个模板文件。全部代码模板包括文件名称后缀格式为:.table.vm的模板文件和其他文件名称后缀格式(如:.vm)的模板文件。动态代码模板仅包括文件名称后缀格式为:.table.vm的模板文件。框架代码模板仅包括除文件名称后缀格式为:.table.vm以外的其他文件名称后缀格式(如:.vm)的模板文件。
基于此,终端设备在获取到待生成代码对应的模板信息时,可以根据该模板信息,以及预设模板信息与预设代码模板之间的对应关系确定待生成代码的目标代码模板。
在S103中,根据所述数据库和所述配置信息构建内置变量。
本申请实施例中,终端设备预先设置有内置变量库,该内置变量库用于存储内置变量,内置变量用于描述某一实际值对应的属性。例如,假设某一实际值为张三,则其对应的内置变量为姓名,即实际值张三对应的属性为姓名。
需要说明的是,内置变量是预设代码模板中可以直接调用的变量。因此,终端设备可以根据数据库和配置信息,在生成目标代码时,将内置变量变换成真实值。
在本申请的一个实施例中,内置变量库中的所有的内置变量,可以通过如图3所示的树型结构存储,通过这个树型对象,终端设备可以直接访问到某个具体的内置变量,提高了终端设备的工作效率。
在本申请的一个实施例中,配置信息包括但不限于:项目配置信息和表格配置信息,表格配置信息包括:表元配置信息和表结构配置信息,因此,终端设备具体可以通过如图4所示的步骤S1031~S1033构建内置变量,详述如下:
在S1031中,根据所述数据库和所述项目配置信息构建第一层内置变量。
本实施例中,项目配置信息包括但不限于:库名、项目中文名称、项目说明、英文名称、项目组织的唯一标识符(groupid)、项目的唯一标识符(artifactid)、版本号、表名前缀、责任人及代码模板等。
其中,groupid在实际开发中可以对应JAVA的包的结构,即main目录里java的目录结构,例如:com.itcaist.demo。
artifactid在实际开发中一般对应项目的名称,即项目根目录的名称,例如:GradleDemo。
终端设备可以根据上述项目配置信息以及与待生成代码对应的数据库中的预设项目配置信息,构建第一层内置变量。
可以理解的是,终端设备构建第一层内置变量,即为终端设备将上述项目配置信息以及与待生成代码对应的数据库中的预设项目配置信息,映射为目标代码对应的项目内容。示例性的,假设项目配置信息中的责任人为zhangshan,则其在目标代码对应的项目内容为:@author${zhangshan}。
在S1032中,根据所述数据库和所述表元配置信息构建第二层内置变量。
本实施例中,表元配置信息包括但不限于:表名和注释。
终端设备可以上述表元配置信息以及与待生成代码对应的数据库中的预设表配置信息,构建第二层内置变量。
可以理解的是,终端设备构建第二层内置变量,即为终端设备将上述表元配置信息以及与待生成代码对应的数据库中的预设表配置信息,映射为目标代码对应的表元内容。示例性的,假设表元配置信息中的表名为空,则其在目标代码对应的表元内容为:private String tableName=null。
在本申请的一个实施例中,为了完善目标代码对应的表元内容,终端设备在构建第二内置变量时,还可以循环遍历预设表配置信息中的所有字段,并检测所有字段中是否存在特殊字段信息(如时间、decimal等)。终端设备在检测到预设表配置信息中存在上述特殊字段信息时,可以根据根据上述特殊字段信息对第二层内置变量进行补充,即将上述特殊字段信息添加至第二层内置变量中。
需要说明的是,在数据库中,表的“列”即称为“字段”,每个字段包含某一专题的信息。示例性的,在“通讯录”数据库中,“姓名”、“联系电话”这些都是表中所有行共有的属性,因此,可以把这些列称为“姓名”字段和“联系电话”字段。
在本申请的另一个实施例中,为了提高代码生成的效率,终端设备在构建第二层内置变量时,可以添加便于编程的对象名变量至第二层内置变量中。
在S1033中,根据所述数据库和所述表结构配置信息构建第三层内置变量。
本实施例中,表结构配置信息包括但不限于:表的多个字段信息、多个索引信息及主键信息,且第三层内置变量也包括但不限于:字段变量、唯一索引变量及主键变量,因此,终端设备具体可以通过如图5所示的步骤S201~S203构建第三层内置变量,详述如下:
在S301中,根据所述数据库中的预设表配置信息和所述表结构配置信息中的字段的第一元数据构建所述字段变量;所述第一元数据包括字段名、注释、数据类型、长度和/或主键标识。
本实施例中,由于数据库中的预设表配置信息和表结构配置信息中存在多个字段,因此,终端设备需要根据上述预设表配置信息和表结构配置信息中的每个字段的第一元数据构建其对应的字段变量,从而得到待生成代码对应的字段变量。
需要说明的是,当预设表配置信息中的某个字段的第一元数据和表结构配置信息中的该字段的第一元数据不同时,以表结构配置信息中的该字段的第一元数据为准。
在本申请的一个实施例中,为了提高提高代码生成的效率,终端设备在构建字段变量后,可以添加便于编程的对象名变量至字段变量中。
在S302中,根据所述预设表配置信息和所述表结构配置信息中的唯一索引的第二元数据构建所述唯一索引变量;所述第二元数据包括索引名、所述注释和/或字段列表。
在实际应用中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。
索引包括普通索引和唯一索引。普通索引允许被索引的数据列包含重复的值。例如,因为人有可能同名,所以同一个姓名在同一个“员工个人资料”数据表里可能出现两次或更多次。与之相对的,如果能确定某个数据列只包含彼此各不相同的值,则为这个数据列创建的索引即为唯一索引。
本实施例中,由于数据库中的预设表配置信息和表结构配置信息中存在多个唯一索引信息,因此,终端设备需要根据上述预设表配置信息和表结构配置信息中的每个唯一索引的第二元数据构建其对应的唯一索引变量,从而得到待生成代码对应的唯一索引变量。
需要说明的是,当预设表配置信息中的某个唯一索引的第二元数据和表结构配置信息中的该唯一索引的第二元数据不同时,以表结构配置信息中的该唯一索引的第二元数据为准。
在本申请的一个实施例中,为了提高提高代码生成的效率,终端设备在构建唯一索引变量后,可以添加便于编程的对象名变量至唯一索引变量中。
在S303中,根据所述预设表配置信息和所述表结构配置信息中的所述第一元数据构建所述主键变量。
在实际应用中,主键指的是一个列或多列的组合,其值能唯一地标识表中的每一行,通过它可强制表的实体完整性。
在本申请的一个实施例中,当预设表配置信息与表结构配置信息中均不存在主键信息时,由于主键指的是一个列或多列的组合,表的“列”也称为“字段”,因此,终端设备可以基于预设规则确定预设表配置信息与表结构配置信息中的多个字段中的目标字段,并根据该目标字段的第一元数据构建待生成代码的主键变量。
预设规则可以是:按照预设顺序排序的多个字段中的第一个字段。其中,预设顺序可以根据实际需要设置,此处不作限制。
在本申请的另一个实施例中,当预设表配置信息与表结构配置信息中存在主键信息时,终端设备可以直接根据该主键信息构建主键变量。
需要说明的是,当预设表配置信息中的主键信息和表结构配置信息中的主键信息不同时,以表结构配置信息中的主键信息为准。
在本申请的再一个实施例中,为了提高提高代码生成的效率,终端设备在构建唯一索引变量后,可以添加便于编程的对象名变量至唯一索引变量中。
在本申请的又一个实施例中,终端设备在根据待生成代码对应的数据库和配置信息构建内置变量后,为了提高代码生成的效率和成功率,终端设备需要确定目标代码模板是否存在且有效。
具体地,终端设备可以检测其本地数据库中是否存在该目标代码模板,若本地数据库中存在该目标代码模板,则确定该目标代码模板存在。终端设备若检测到本地数据库中不存在该目标代码模板,则输出第二提示信息,该第二提示信息包括该目标代码模板的下载链接。
终端设备在检测到待目标代码模板下载成功时,还需要对该目标代码模板进行初始化操作,从而可以确定该目标代码模板存在。
终端设备在确定目标代码模板存在后,还可以响应于用户输入的更新指令,对目标代码模板进行更新,得到最新的目标代码模板,防止无效的缓存文件。
需要说明的是,终端设备检测到用户输入的更新指令可以是:检测到用户执行第三预设操作。其中,第三预设操作可以根据实际需要设置,此处不作限制,示例性的,第三预设操作可以是:点击终端设备上与代码生成相关的应用程序上的第三预设控件。第三预设控件可以根据实际需要设置,此处不作限制。
在S104中,根据所述目标代码模板和所述内置变量生成目标代码。
本申请实施例中,终端设备可以直接将构建好的内置变量导入目标代码模板中,从而得到目标代码。
在本申请的一个实施例中,为了进一步确定目标代码模板对于待生成代码是否有效,从而成功得到目标代码,终端设备可以通过如图6所示的步骤S1041~S1042生成目标代码,详述如下:
在S1041中,根据所述项目配置信息确定所述待生成代码的目标生成范围。
本实施例中,待生成代码的生成范围包括但不限于:只生成动态代码,只生成框架代码及生成全部代码。
需要说明的是,只生成动态代码通常针对于存在至少一个完整的代码模板,且经过多次修改后的老项目,只生成框架代码通常针对没有一个完整的代码模板的新项目,生成全部代码通常针对存在一个完整的代码模板的新项目。其中,完整的代码模板可以是全部代码模板。
同时,由于项目配置信息包括生成范围,因此,终端设备可以直接根据项目配置信息确定待生成代码的目标生成范围。
本实施例中,终端设备在确定待生成代码的目标生成范围后,可以判断待生成代码的目标生成范围与目标代码模板的生成范围是否相符,以此判断目标代码模板是否有效。
在本申请一个实施例中,终端设备在检测到目标代码模板为全部代码模板时,可以确定目标代码模板的生成范围为生成全部代码,此时,终端设备在检测到待生成代码的目标生成范围也为生成全部代码时,或者,终端设备在检测到目标代码模板为框架代码模板时,可以确定目标代码模板的生成范围为只生成框架代码,此时,终端设备在检测到待生成代码的目标生成范围也为只生成框架代码时,或者,终端设备在检测到目标代码模板为动态代码模板时,可以确定目标代码模板的生成范围为只生成动态代码,此时,终端设备在检测到待生成代码的目标生成范围也为只生成动态代码时,可以确定待生成代码的目标生成范围与目标代码模板的生成范围相符,也就是说,目标代码模板为有效模板,因此,终端设备可以执行步骤S1042。
在本申请的另一个实施例中,终端设备在检测到目标代码模板为全部代码模板时,可以确定目标代码模板的生成范围为生成全部代码,此时,终端设备在检测到待生成代码的目标生成范围不是生成全部代码时,或者,终端设备在检测到目标代码模板为框架代码模板时,可以确定目标代码模板的生成范围为只生成框架代码,此时,终端设备在检测到待生成代码的目标生成范围为只生成框架代码时,或者,终端设备在检测到目标代码模板为动态代码模板时,可以确定目标代码模板的生成范围为只生成动态代码,此时,终端设备在检测到待生成代码的目标生成范围不是只生成动态代码时,可以确定待生成代码的目标生成范围与目标代码模板的生成范围不符,也就是说,目标代码模板为无效模板,因此,终端设备可以输出第三提示信息,该第三提示信息用于描述代码生成失败。
在S1042中,当检测到所述目标生成范围与所述目标代码模板的生成范围相符时,根据所述目标代码模板、所述第一层内置变量、所述第二层内置变量及所述第三层内置变量生成所述目标代码。
本实施例中,终端设备在检测到待生成代码的目标生成范围与目标代码模板的生成范围相符,且目标代码模板的生成范围为只生成动态代码,即目标代码模板为动态代码模板时,终端设备可以扫描动态代码模板中的每个模板文件(针对文件名称后缀格式为.table.vm生效)的每一个表,并根据预设表配置信息、表元配置信息和表结构配置信息,确定这个表是否需要重新生成,在确定该表需要重新生成时,可以确定该待生成代码对应的模板文件,进而根据第二层内置变量、第三层内置变量及该模板文件生成目标代码。
需要说明的是,在生成上述目标代码后,其目标代码的路径保持不变,原文件名为:{模板名}{后缀名}{模块名(可空)}.table.vm,目标代码对应的文件名可以改成:{类名}{模板名}{后缀名}。示例性的,假设原文件名为:Dao.java.table.vm,则目标代码对应的文件名可以改为:UserDao.java。
本实施例中,终端设备在检测到待生成代码的目标生成范围与目标代码模板的生成范围相符,且目标代码模板的生成范围为只生成框架代码,即目标代码模板为框架代码模板时,终端设备可以扫描待框架代码模板中的每个模板文件(排除文件名称后缀格式为.table.vm生效),直接根据第一层内置变量、第二层内置变量及第三层内置变量生成目标代码。
需要说明的是,在生成上述目标代码后,其目标代码的路径保持不变,原文件名为:{模板名}{后缀名}.vm,目标代码对应的文件名可以改成:{模板名}{后缀名},其他文件的文件名不变。示例性的,假设原文件名为:Dao.java.vm,则目标代码对应的文件名可以改为:Dao.java。
本实施例中,终端设备在检测到待生成代码的目标生成范围与目标代码模板的生成范围相符,且目标代码模板的生成范围为生成全部代码,即目标代码模板为全部代码模板时,终端设备可以扫描待动态代码模板中的每个模板文件(只对文件名称后缀格式为.table.vm生效)的每一个表,并根据预设表配置信息、表元配置信息和表结构配置信息,确定这个表是否需要重新生成,在确定该表需要重新生成时,可以得到目标代码文件,进而根据第二层内置变量和第三层内置变量生成目标代码。
同时,终端设备还可以扫描待框架代码模板中的每个模板文件(排除文件名称后缀格式为.table.vm生效),直接根据第一层内置变量、第二层内置变量及第三层内置变量生成目标代码。
需要说明的是,在生成上述目标代码后,其目标代码的路径保持不变,原文件名为:{模板名}{后缀名}{模块名(可空)}.table.vm,可以改成:{类名}{模板名}{后缀名};原文件名为:{模板名}{后缀名}{模块名(可空)}.table.vm,可以改成:{类名}{模板名}{后缀名}。
以上可以看出,本申请实施例提供的一种生成代码的方法,通过接收到的携带有待生成代码对应的模板信息和配置信息,以及与待生成代码对应的数据库的代码生成请求,可以根据上述特征信息确定目标代码模板,根据数据库和配置信息构建内置变量,最后根据目标代码模板和内置变量生成目标代码。本申请实施例提供的生成代码的方法可以针对待生成代码对应的模板信息确定不同的目标代码模板,即目标代码类型的多样化,同时还可以根据构建的内置变量满足待生成代码的不同要求,提高了代码生成的扩展能力以及代码质量。
请参阅图7,图7是本申请另一实施例提供的一种生成代码的方法的实现流程图。如图7所示,在步骤S102之前,还可以包括步骤S01~S02,详述如下:
在S01中,获取历史代码。
在S02中,根据内置变量库对所述历史代码中的可变部分进行替换,得到代码模板。
本实施例中,终端设备在生成目标代码之前,可以先获取历史代码,以生成代码模块。
需要说明的是,终端设备可以获取在生成目标代码之前,任一时间段的完整代码,并将该些完整代码确定为历史代码。
在本实施例的一种实现方式中,终端设备可以从与其无线通信/有线通信连接的服务器中获取历史代码。其中,服务器可以是计算机、台式电脑等设备。
本实施例中,终端设备在获取历史代码后,可以响应于用户输入的变量信息,根据该变量信息确定历史代码的可变部分。
在本实施例的一种实现方式中,终端设备可以在屏幕上显示获取到的历史代码,因此,用户可以直接在该历史代码中点击某一代码,以完成变量信息选择操作,即输入变量信息。
终端设备在检测到上述变量信息选择操作后,可以获取变量信息,即用户在历史代码中点击的某一代码,并将该代码确定为可变部分。
终端设备预先设置有内置变量库,该内置变量库用于存储内置变量,内置变量用于描述某一实际值对应的属性。例如,假设某一实际值为张三,则其对应的内置变量为姓名,即实际值张三对应的属性为姓名。
基于此,终端设备可以根据可变部分与内置变量库中的内置变量之间的对应关系,对该可变部分进行替换,即将历史代码中的可变部分替换为与其对应的内置变量,从而得到代码模板。
以上可以看出,本申请实施例提供的一种生成代码的方法,通过内置变量对获取到的历史代码中的可变部分进行替换,从而得到代码模板,使得代码模板不仅可以继承历史代码的格式,还可以根据用户的需要将可变部分进行替换,不仅提高了后续生成的目标代码的质量,还提高了代码模板的使用率。
应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
对应于上文实施例所述的一种生成代码的方法,图8示出了本申请一实施例提供的生成代码的装置的结构框图,为了便于说明,仅示出了与本申请实施例相关的部分。参照图8,该生成代码的装置800包括:接收单元81、模板确定单元82、变量构建单元83及第一生成单元84。其中:
接收单元81用于接收代码生成请求;所述代码生成请求携带有待生成代码对应的模板信息和配置信息,以及与所述待生成代码对应的数据库。
模板确定单元82用于根据所述模板信息确定所述待生成代码的目标代码模板。
变量构建单元83用于根据所述数据库和所述配置信息构建内置变量。
第一生成单元84用于根据所述目标代码模板和所述内置变量生成目标代码。
在本申请的一个实施例中,所述配置信息包括项目配置信息、表元配置信息以及表结构配置信息;变量构建单元83具体包括:第一构建单元、第二构建单元及第三构建单元。其中:
第一构建单元,用于根据所述数据库和所述项目配置信息构建第一层内置变量。
第二构建单元,用于根据所述数据库和所述表元配置信息构建第二层内置变量。
第三构建单元,用于根据所述数据库和所述表结构配置信息构建第三层内置变量。
在本申请的一个实施例中,变量构建单元还包括:补充单元。
补充单元用于当检测到所述数据库中的预设表配置信息中存在特殊字段信息时,根据所述特殊字段信息对所述第二层内置变量进行补充。
在本申请的一个实施例中,所述第三层内置变量包括字段变量、唯一索引变量及主键变量;第三构建单元具体包括:字段变量构建单元、唯一索引变量构建单元及主键变量构建单元。其中:
字段变量构建单元用于根据所述数据库中的预设表配置信息和所述表结构配置信息中的字段的第一元数据构建所述字段变量;所述第一元数据包括字段名、注释、数据类型、长度和/或主键标识。
唯一索引变量构建单元用于根据所述预设表配置信息和所述表结构配置信息中的唯一索引的第二元数据构建所述唯一索引变量;所述第二元数据包括索引名、所述注释和/或字段列表。
主键变量构建单元用于根据所述预设表配置信息和所述表结构配置信息中的所述第一元数据构建所述主键变量。
在本申请的一个实施例中,变量构建单元还包括:添加单元。
添加单元用于分别在所述字段变量、所述唯一索引变量及所述主键变量中添加对象名变量。
在本申请的一个实施例中,第一生成单元82具体包括:范围确定单元和第二生成单元。其中:
范围确定单元用于根据所述项目配置信息确定所述待生成代码的目标生成范围。
第二生成单元用于当检测到所述目标生成范围与所述目标代码模板的生成范围相符时,根据所述目标代码模板、所述第一层内置变量、所述第二层内置变量及所述第三层内置变量生成所述目标代码。
在本申请的一个实施例中,生成代码的装置800还包括:获取单元和替换生成单元。其中:
获取单元用于获取历史代码。
替换单元用于根据内置变量库对所述历史代码中的可变部分进行替换,得到代码模板。
以上可以看出,本申请实施例提供的一种生成代码的装置,通过接收到的携带有待生成代码对应的模板信息和配置信息,以及与待生成代码对应的数据库的代码生成请求,可以根据上述特征信息确定目标代码模板,根据数据库和配置信息构建内置变量,最后根据目标代码模板和内置变量生成目标代码。本申请实施例提供的生成代码的方法可以针对待生成代码对应的模板信息确定不同的目标代码模板,即目标代码类型的多样化,同时还可以根据构建的内置变量满足待生成代码的不同要求,提高了代码生成的扩展能力以及代码质量。
图9为本申请一实施例提供的终端设备的结构示意图。如图9所示,该实施例的终端设备9包括:至少一个处理器90(图9中仅示出一个)处理器、存储器91以及存储在所述存储器91中并可在所述至少一个处理器90上运行的计算机程序92,所述处理器90执行所述计算机程序92时实现上述任意一种生成代码的方法实施例中的步骤。
本领域技术人员可以理解,图9仅仅是终端设备9的举例,并不构成对终端设备9的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如还可以包括输入输出设备、网络接入设备等。
所称处理器90可以是中央处理单元(Central Processing Unit,CPU),该处理器90还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
所述存储器91在一些实施例中可以是所述终端设备9的内部存储单元,例如终端设备9的硬盘或内存。所述存储器91在另一些实施例中也可以是所述终端设备9的外部存储设备,例如所述终端设备9上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,所述存储器91还可以既包括所述终端设备9的内部存储单元也包括外部存储设备。所述存储器91用于存储操作系统、应用程序、引导装载程序(BootLoader)、数据以及其他程序等,例如所述计算机程序的程序代码等。所述存储器91还可以用于暂时地存储已经输出或者将要输出的数据。
本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时可实现上述任意一种生成代码的方法实施例中的步骤。
本申请实施例提供了一种计算机程序产品,当计算机程序产品在终端设备上运行时,使得终端设备执行时可实现上述任意一种生成代码的方法实施例中的步骤。
需要说明的是,上述装置/单元之间的信息交互、执行过程等内容,由于与本申请方法实施例基于同一构思,其具体功能及带来的技术效果,具体可参见方法实施例部分,此处不再赘述。
本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时可实现上述任意一种生成代码的方法实施例中的步骤。
本申请实施例提供了一种计算机程序产品,当计算机程序产品在终端设备上运行时,使得终端设备执行时实现可实现上述任意一种生成代码的方法实施例中的步骤。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
在本申请所提供的实施例中,应该理解到,所揭露的生成代码的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置/终端设备实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。
以上所述实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围,均应包含在本申请的保护范围之内。

Claims (10)

1.一种生成代码的方法,其特征在于,包括:
接收代码生成请求;所述代码生成请求携带有待生成代码对应的模板信息和配置信息,以及与所述待生成代码对应的数据库;
根据所述模板信息确定所述待生成代码的目标代码模板;
根据所述数据库和所述配置信息构建内置变量;
根据所述目标代码模板和所述内置变量生成目标代码。
2.如权利要求1所述的生成代码的方法,其特征在于,所述配置信息包括项目配置信息、表元配置信息以及表结构配置信息;所述根据所述数据库和所述配置信息构建内置变量,包括:
根据所述数据库和所述项目配置信息构建第一层内置变量;
根据所述数据库和所述表元配置信息构建第二层内置变量;
根据所述数据库和所述表结构配置信息构建第三层内置变量。
3.如权利要求2所述的生成代码的方法,其特征在于,所述根据所述数据库和所述表元配置信息构建第二层内置变量之后,还包括:
当检测到所述数据库中的预设表配置信息中存在特殊字段信息时,根据所述特殊字段信息对所述第二层内置变量进行补充。
4.如权利要求2所述的生成代码的方法,其特征在于,所述第三层内置变量包括字段变量、唯一索引变量及主键变量;所述根据所述数据库和所述表结构配置信息构建第三层内置变量,包括:
根据所述数据库中的预设表配置信息和所述表结构配置信息中的字段的第一元数据构建所述字段变量;所述第一元数据包括字段名、注释、数据类型、长度和/或主键标识;
根据所述预设表配置信息和所述表结构配置信息中的唯一索引的第二元数据构建所述唯一索引变量;所述第二元数据包括索引名、所述注释和/或字段列表;
根据所述预设表配置信息和所述表结构配置信息中的所述第一元数据构建所述主键变量。
5.如权利要求4所述的生成代码的方法,其特征在于,所述根据所述数据库和所述表结构配置信息构建第三层内置变量之后,还包括:
分别在所述字段变量、所述唯一索引变量及所述主键变量中添加对象名变量。
6.如权利要求2所述的生成代码的方法,其特征在于,所述根据所述目标代码模板和所述内置变量生成目标代码,包括:
根据所述项目配置信息确定所述待生成代码的目标生成范围;
当检测到所述目标生成范围与所述目标代码模板的生成范围相符时,根据所述目标代码模板、所述第一层内置变量、所述第二层内置变量及所述第三层内置变量生成所述目标代码。
7.如权利要求1至6任一项所述的生成代码的方法,其特征在于,所述根据所述模板信息确定所述待生成代码的目标代码模板之前,还包括:
获取历史代码;
根据内置变量库对所述历史代码中的可变部分进行替换,得到代码模板。
8.一种生成代码的装置,其特征在于,包括:
接收单元,用于接收代码生成请求;所述代码生成请求携带有待生成代码对应的模板信息和配置信息,以及与所述待生成代码对应的数据库;
模板确定单元,用于根据所述模板信息确定所述待生成代码的目标代码模板;
变量构建单元,用于根据所述数据库和所述配置信息构建内置变量;
第一生成单元,用于根据所述目标代码模板和所述内置变量生成目标代码。
9.一种终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至7任一项所述的生成代码的方法的步骤。
10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述的生成代码的方法的步骤。
CN202111327076.1A 2021-11-10 2021-11-10 一种生成代码的方法、装置及终端设备 Pending CN114217783A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111327076.1A CN114217783A (zh) 2021-11-10 2021-11-10 一种生成代码的方法、装置及终端设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111327076.1A CN114217783A (zh) 2021-11-10 2021-11-10 一种生成代码的方法、装置及终端设备

Publications (1)

Publication Number Publication Date
CN114217783A true CN114217783A (zh) 2022-03-22

Family

ID=80696783

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111327076.1A Pending CN114217783A (zh) 2021-11-10 2021-11-10 一种生成代码的方法、装置及终端设备

Country Status (1)

Country Link
CN (1) CN114217783A (zh)

Similar Documents

Publication Publication Date Title
US11010401B2 (en) Efficient snapshot generation of data tables
CN110795455A (zh) 依赖关系解析方法、电子装置、计算机设备及可读存储介质
CN108536745B (zh) 基于Shell的数据表提取方法、终端、设备及存储介质
CN112364083A (zh) 基于配置文件的数据字典管理方法、系统及存储介质
CN108776587B (zh) 数据获取方法、装置、计算机设备以及存储介质
CN112860777B (zh) 数据处理方法、装置及设备
CN109491962B (zh) 一种文件目录树管理方法及相关装置
CN111736762B (zh) 数据存储网络的同步更新方法、装置、设备及存储介质
US8327324B1 (en) Message logging system
CN114185895A (zh) 数据导入导出方法、装置、电子设备及存储介质
CN113010476A (zh) 元数据查找方法、装置、设备及计算机可读存储介质
CN115357590A (zh) 针对数据变更的记录方法、装置、电子设备及存储介质
CN111427577A (zh) 代码处理方法、装置及服务器
CN114995859A (zh) 页面热更新方法、装置、设备及存储介质
CN108664505B (zh) 一种数据库表结构的导出方法及装置
CN114217783A (zh) 一种生成代码的方法、装置及终端设备
CN115455006A (zh) 数据处理方法、数据处理装置、电子设备及存储介质
CN112003837B (zh) 基于Modbus协议的设备智能适配方法、装置及存储介质
US11693834B2 (en) Model generation service for data retrieval
CN112685304A (zh) 前端信息规范校验方法、系统、装置及存储介质
CN111881220A (zh) 列表存储下的数据操作方法、装置、电子设备和存储介质
CN113434122A (zh) 多角色页面创建方法、装置、服务器及可读存储介质
US20170286195A1 (en) Information object system
CN112417012A (zh) 数据处理方法及系统
CN110413644B (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