CN112463135A - 代码生成方法、代码生成器、电子设备及存储介质 - Google Patents
代码生成方法、代码生成器、电子设备及存储介质 Download PDFInfo
- Publication number
- CN112463135A CN112463135A CN202011459982.2A CN202011459982A CN112463135A CN 112463135 A CN112463135 A CN 112463135A CN 202011459982 A CN202011459982 A CN 202011459982A CN 112463135 A CN112463135 A CN 112463135A
- Authority
- CN
- China
- Prior art keywords
- code
- template
- layer
- variable
- code template
- 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 98
- 238000004458 analytical method Methods 0.000 claims abstract description 12
- 230000002085 persistent effect Effects 0.000 claims description 3
- 238000004590 computer program Methods 0.000 claims description 2
- 230000008569 process Effects 0.000 description 11
- 238000004891 communication Methods 0.000 description 10
- 238000012545 processing Methods 0.000 description 9
- 238000011161 development Methods 0.000 description 8
- 238000005516 engineering process Methods 0.000 description 8
- 230000008859 change Effects 0.000 description 5
- 238000010586 diagram Methods 0.000 description 5
- 238000013461 design Methods 0.000 description 4
- 230000006870 function Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 235000010627 Phaseolus vulgaris Nutrition 0.000 description 2
- 244000046052 Phaseolus vulgaris Species 0.000 description 2
- 238000010276 construction Methods 0.000 description 2
- 230000003111 delayed effect Effects 0.000 description 2
- 238000002474 experimental method Methods 0.000 description 2
- 210000001503 joint Anatomy 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 235000006719 Cassia obtusifolia Nutrition 0.000 description 1
- 235000014552 Cassia tora Nutrition 0.000 description 1
- 244000201986 Cassia tora Species 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000003032 molecular docking Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000037361 pathway Effects 0.000 description 1
- 230000002688 persistence Effects 0.000 description 1
- 230000001737 promoting effect Effects 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/313—Logic programming, e.g. PROLOG programming language
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Stored Programmes (AREA)
Abstract
本说明书提供了一种代码生成方法,包括:设置至少一个代码模板;其中,所述代码模板中包括至少一个变量;获取创建数据表的结构化查询语言(SQL)语句;对所述创建数据表的SQL语句进行语义解析,获取其中的表信息;其中,所述表信息可以包括至少一个表信息参数;建立所述至少一个表信息参数与所述至少一个代码模板的至少一个变量的对应关系;以及按照对应关系填入所述至少一个代码模板中,生成与所述至少一个模板对应的源代码。本说明书还提供了代码生成器、电子设备及存储介质。
Description
技术领域
本说明书一个或多个实施例涉及软件开发技术领域,尤其涉及一种代码生成方法、代码生成器、电子设备及存储介质。
背景技术
模型-视图-控制器(MVC,Model View Controller)模式是当前软件开发中最为常用的一种软件开发框架模式。其中,M是指业务模型,V是指用户界面,而C则是指控制器。使用MVC的目的是实现业务模型和用户界面的代码分离,从而使同一个程序可以使用不同的表现形式。
Spring MVC是属于SpringFrameWork的后续产品。Spring框架提供了构建Web应用程序的全功能MVC模块。使用Spring可插入MVC架构,从而在使用Spring进行Web开发时,可以选择使用Spring的Spring MVC框架或集成其他MVC开发框架。
Spring MVC是一种分层的架构,包括:主要用于转发页面请求的前端控制器(DispatcherServlet)、页面展示层、控制层(Controller)、业务层(Service)以及数据访问层(DAO,Data Access Object)。其中,页面展示层称为V,主要通过超文本标记语言(HTML)、JavaScript(JS)或层叠样式表(CSS)实现;控制层主要负责控制业务逻辑处理,用来和页面展示层交互;业务层为Java项目中业务逻辑处理代码层,主要负责处理复杂的业务逻辑,并且包含了接口调用和服务注册等功能。DAO层是Java项目用于访问数据库的代码集合,专门用来做和数据库的交互访问。此外,上述Spring MVC框架还可以包括持久对象层(PO,Persistent Object,亦可称为POJO)、业务处理对象(BO)以及视图展示对象(VO)。其中,POJO是一个简单的、普通的Java对象,它包含业务逻辑处理或持久化逻辑等,但不是JavaBean、EntityBean等,不具有任何特殊角色,不继承或不实现任何其它Java框架的类或接口,常用来与数据库表对应,将数据库的表对应为具体Java对象。
在Spring MVC框架下,当前端控制器收到业务请求后,首先将业务请求发送到控制层。控制层调用业务层处理业务,进一步业务层调用DAO层访问数据库,并完成数据库的增、删、改、查操作。之后,DAO层返回处理结果给业务层,业务层返回结果给控制层,最后控制层再返回具体页面和数据到客户端。
对于上述POJO、DAO层、控制层以及业务层的应用程序接口调用等代码,业务逻辑不强甚至无业务逻辑,但数量依然较为庞大。对于开发人员来讲属于复制+粘贴的体力劳动,很少甚至无智力劳动成果产生,但仍不可避免会有人为错误产生,且效率低下、代码规范难以控制。
发明内容
有鉴于此,本说明书一个或多个实施例提出一种代码生成方法,可以按照标准模板生成上述PO层、DAO层、控制层以及业务层的应用程序接口调用代码,可以减少开发人员的体力劳动,并大幅度提高项目开发效率和规范程度。
本说明书提出的方法代码生成,包括:设置至少一个代码模板;其中,所述代码模板中包括至少一个变量;获取创建数据表的结构化查询语言(SQL)语句;对所述创建数据表的SQL语句进行语义解析,获取其中的表信息;其中,所述表信息可以包括至少一个表信息参数;建立所述至少一个表信息参数与所述至少一个代码模板的至少一个变量的对应关系;以及按照所述对应关系将所述表信息参数分别填入所述至少一个代码模板中,生成与所述至少一个模板对应的源代码。
其中,所述至少一个代码模板包括:数据访问(DAO)层代码模板或持久对象(PO)层代码模板。
其中,所述表信息参数包括:表名称、字段名、字段类型、字段长度以及字段的中文名称。
本说明书提出的方法代码生成,包括:设置至少一个代码模板;其中,所述代码模板中包括至少一个变量;从业务层代码中获取用于生成源代码的强业务逻辑层代码;对所述强业务逻辑层代码进行解析,获取所述强业务逻辑层代码中方法的对象属性信息;建立所述对象属性信息与所述至少一个代码模板的至少一个变量的对应关系;以及按照所述对应关系将所述对象属性信息填入所述至少一个代码模板中,生成与所述至少一个模板对应的源代码。
其中,所述至少一个代码模板包括:控制层代码模板或业务层代码模板。
其中,所述对所述强业务逻辑层代码进行解析包括:对所述强业务逻辑层代码进行Java反射,得到所述强业务逻辑层代码中方法的对象属性信息;其中,所述对象属性信息包括:输出参数、输入参数和方法名以及方法上的特殊注解。
本说明书一个或多个实施例提出一种代码生成器,包括:
第一模板生成模块,用于设置至少一个代码模板;其中,所述代码模板中包括至少一个变量;
第一业务元数据获取模块,用于获取创建数据表的结构化查询语言SQL语句;
语义解析模块,用于对所述创建数据表的SQL语句进行语义解析,获取其中的表信息;
第一代码生成模块,用于建立所述表信息中的各个表信息参数与所述至少一个代码模板的至少一个变量的对应关系,并按照所述对应关系填入所述至少一个代码模板中,生成与所述至少一个模板对应的源代码。
本说明书一个或多个实施例提出一种代码生成器,包括:
第二模板生成模块,用于设置至少一个代码模板;其中,所述代码模板中包括至少一个变量;
第二业务元数据获取模块,用于从业务层代码中获取用于生成源代码的强业务逻辑层代码;
解析模块,用于对所述强业务逻辑层代码进行解析,获取所述强业务逻辑层代码中方法的对象属性信息;
第二代码生成模块,用于建立所述对象属性信息与所述至少一个代码模板的至少一个变量的对应关系,并按照所述对应关系填入所述至少一个代码模板中,生成与所述至少一个模板对应的源代码。
本说明书的一个或多个实施例还提供了一种电子设备,可以包括:存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述程序时实现上述代码生成方法。
本说明书的一个或多个实施例还提供了一种非暂态计算机可读存储介质,其中,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使所述计算机执行上述代码生成方法。
本说明书实施例所述的代码生成方法为由机器实现的自动过程或者本说明书实施例所述的代码生成器,可以替代人工编写这些代码的工作,从而可以减少开发人员的体力劳动,使开发人员不再关注业务逻辑性不强的代码编写,投入更多的精力在业务逻辑性强的代码的编写上,大幅度提高项目开发效率。通过实验可以发现,上述自动生成的源代码总量可以达到一个项目源代码总量的30%以上,因此,极大地提高了项目的开发效率。
此外,上述代码生成方法和代码生成器可应用到企业级批量代码的自动生成,运行稳定,质量有保证。且上述代码生成方法和代码生成器对代码规范实现了强控制,避免人为编写带来的编码风格、格式的差异,便于后期的统一维护。而且,如遇到项目后期表设计更改带来的较大调整,该生成工具更是方便快捷的实现了差异代码的替换,甚至可实现秒替换,不用再担心设计更改带来的项目工期遭遇延期的情况。
更进一步,上述代码生成方法和代码生成器还形成了一套关于可自动生成代码边界的理论体系,清晰定义了可通过工具自动生成的代码的边界范围,并通过一定规范约束很好的解决了生成代码与开发人员手动开发代码的无缝对接。
附图说明
为了更清楚地说明本说明书一个或多个实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书一个或多个实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1显示了本说明书一些实施例所述的代码生成方法实现流程;
图2显示了本说明书另一些实施例所述的代码生成方法实现流程;
图3显示了本说明书一些实施例所述的代码生成器内部结构示意图;
图4显示了本说明书另一些实施例所述的代码生成器内部结构示意图;
图5显示了本说明书一些实施例所述的电子设备的内部结构示意图。
具体实施方式
为使本公开的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本公开进一步详细说明。
需要说明的是,除非另外定义,本说明书一个或多个实施例使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本说明书一个或多个实施例中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
为了解决上述开发人员花费大量体力在无智力劳动成果产生的POJO、DAO层、控制层以及业务层的应用程序接口调用等代码上,导致生产效率低下、代码规范难以控制的问题,本说明书的实施例提出了一种代码生成方法,可以按照标准模板生成上述POJO、DAO层、控制层以及业务层的应用程序接口调用代码,从而可以减少开发人员的体力劳动,并大幅度提高项目开发效率和规范程度。
下面就结合附图详细说明本说明书的具体实施例。
图1显示了本说明书一些实施例所述的代码生成方法的实现流程。该方法可以由代码生成器实现。通过图1所示的代码生成方法可以生成PO层和DAO层的源代码。如图1所示,该方法可以包括:
在步骤102,设置至少一个代码模板;其中,上述代码模板中包括至少一个变量。
在本说明书的一些实施例中,可以根据实际使用的技术框架,采用Freemarker技术,确定涵盖工程中实际使用的各种编码规范,并固定下来,作为上述代码模板。上述代码模板可以是DAO层的代码模板也可以是PO层的代码模板,这些代码模板是自动生成DAO层或PO层源代码的基础。
其中,Freemarker是一款模板引擎,也即是一种基于模板和要改变的数据,并用来生成输出文本(HTML网页、电子邮件、配置文件、或源代码等)的通用工具。Freemarker不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。
例如,如下所示的一段代码即为PO层的一个代码模板:
在上述代码模板的示例中,${}中的部分是在代码生成过程中需要被替换掉的至少一个变量;其余部分是需要固定下来的代码部分。
再例如,如下所示的一段代码即为DAO层的SQL动态拼写代码模板:
在上述代码模板的示例中,${}中的部分是在代码生成过程中需要被替换掉的至少一个变量;其余部分是需要固定下来的代码部分。
相似地,还可以设置在数据表中增加一条数据记录的代码模板,在数据表中删除一条数据记录的代码模板,在数据表中更新一条数据记录的代码模板,以及在数据表中查询一条数据记录的代码模板。
基于上述代码模板可以自动生成数据表的增、删、改和查的源代码。
在步骤104,获取创建数据表的结构化查询语言(SQL)语句。
本领域的技术人员可以理解,SQL是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。在数据库中创建一张数据表的需求,通常可以通过一段SQL语句实现。
例如,如下所示的一段SQL语句即可用于创建一个表名称为“userinfo”的数据表。
通过上述SQL语句,可以创建一个表名称为“userinfo”,中文表名为“用户信息”的数据表。其中,该数据表包括三个字段,其中,第一个字段名为“user_id”,字段类型为整型,长度为11,注释(也即中文名称)为“用户ID”;第二个字段名为“username”,字段类型为字符串类型,长度为255,中文名称为“用户名”;第三个字段名为“addtime”,字段类型为时间类型,中文名称为“创建时间”。并且上述数据表的主键是“user_id”。
在步骤106,对上述创建数据表的SQL语句进行语义解析,获取其中的表信息。
由于上述创建数据表的SQL语句具有相对固定的格式,因此,可以通过对SQL语句进行文本解析,确定其中的关键词,例如CREATE TABLE,COLUM,COMMONS,VARCH,NUMBER等关键词,并从上述创建数据表的SQL语句中提取上述关键词作为上述表信息。其中,上述表信息可以包括至少一个表信息参数。
在本说明书的一些实施例中,上述表信息参数可以包括:表名称、字段名、字段类型、字段长度以及字段的中文名称。这些表信息参数可以作为相关业务信息用于生成DAO层或PO层源代码。
例如,对于上述创建数据表的SQL语句,可以从中提取表名称“userinfo”及其对应的中文名“用户信息”,第一字段名“user_id”,第一字段类型整型,第一长度11,第一中文名称“用户ID”;第二字段名“username”,第二字段类型字符串类型,第二长度255,第二中文名称“用户名”;第三字段名“addtime”,第三字段类型时间类型,第三中文名称“创建时间”。这些信息将作为相关业务信息在后续步骤中用于生成DAO层或PO层源代码。
在步骤108,建立上述表信息中的各个表信息参数与上述至少一个代码模板的至少一个变量的对应关系。
在本说明书的实施例中,可以根据代码模板中各个变量的具体含义建立上述表名称、字段名、字段类型、字段长度以及字段的中文名称与上述至少一个代码模板的至少一个变量的对应关系。例如,在本步骤中,可以建立表信息参数中“字段名”与代码模板中变量“fieldItem.columnName”之间的对应关系。
在步骤110,按照上述对应关系将上述表信息参数填入上述至少一个代码模板中,生成与上述至少一个模板对应的源代码。
在本说明书的实施例中,在本步骤中,可以按照表名称、字段名、字段类型、字段长度以及字段的中文名称与上述至少一个代码模板的至少一个变量的对应关系,将上述表名称、字段名、字段类型、字段长度以及字段的中文名称分别填入上述至少一个代码模板中,生成DAO层或PO层源代码。
具体地,在本说明书的实施例中,可以使用Freemark技术实现将上述至少一个变量填入代码模板的操作。
例如,将上述表信息填入上述增加数据记录的代码模板得到增加数据记录的源代码;将上述表信息填入上述删除数据记录的代码模板得到删除数据记录的源代码;将上述表信息填入上述更新数据记录的代码模板得到更新数据记录的源代码;将上述表信息填入上述查询数据记录的代码模板得到查询数据记录的源代码。
从上述实施例可以看出,通过上述代码生成方法可以从创建数据表的SQL语句提取出编写PO层或DAO层源代码所需的表信息,然后将提取的表信息作为预先设置的代码模板的变量填入代码模板中,可以直接得到与代码模板对应的PO层或DAO层源代码,而无需开发人员进行人工编写。
图2显示了本说明书一些实施例所述的代码生成方法的实现流程。该方法可以由代码生成器实现。通过图2所示的方法可以生成控制层和业务层的源代码。如图2所示,该方法可以包括:
在步骤202,设置至少一个代码模板;其中,上述代码模板中设置至少一个变量。
在本说明书的一些实施例中,可以根据实际使用的技术框架,采用Freemarker技术,确定涵盖工程中实际使用的各种编码规范,并固定下来,作为上述代码模板。上述代码模板可以是业务层的代码模板也可以是控制层层的代码模板,这些代码模板是自动生成业务层和控制层源代码的基础。
其中,Freemarker是一款模板引擎,也即是一种基于模板和要改变的数据,并用来生成输出文本(HTML网页、电子邮件、配置文件、或源代码等)的通用工具。Freemarker不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。
例如,下面显示了一个业务层的代码模板的示例:
在上述代码模板的示例中,${}中的部分是在代码生成过程中需要被替换掉的至少一个变量;其余部分是需要固定下来的代码部分。
又例如,下面显示了一个控制层的代码模板的示例:
在上述代码模板的示例中,${}中的部分是在代码生成过程中需要被替换掉的至少一个变量;其余部分是需要固定下来的代码部分。
基于上述代码模板可以自动生成业务层和控制层的源代码。
在步骤204,从业务层代码中获取用于生成源代码的强业务逻辑层代码。
在本说明书的一些实施例中,在编写业务层代码的过程中,可以将开发人员编写的强业务逻辑层代码在包管理上进行分层管理,便于后期对接工具生成的接口调用、服务注册等代码。其中,在本说明书的实施例中,强业务逻辑层代码代表可用于生成其他业务层源代码或控制层源代码的代码。
具体地,在本说明书的实施例中,开发人员在进行代码编写的时候,会将上述强业务逻辑层代码进行标记。因此,通过文本解析的方式可以从业务层代码中解析出上述标记,从而确定可用于生成其他业务层源代码或控制层源代码的强业务逻辑层代码。
在步骤206,对上述强业务逻辑层代码进行解析,获取上述强业务逻辑层代码中方法的对象属性信息。
在本说明书的实施例中,上述解析可以包括:对上述强业务逻辑层代码进行Java反射,得到上述强业务逻辑层代码中方法的对象属性信息。上述对象属性信息包括:输出参数、输入参数和方法名以及方法上的特殊注解。需要说明的是,上述Java反射的方法有个前提条件,就是使用Java反射的方法对业务bean中的PO有依赖,因此,需要在业务bean中提前生成PO并将生成的PO预先添加到代码生成器的依赖中。
也就是说,在本说明书的实施例中,上述步骤206的主要目的是获取强业务逻辑层方法的出、入参数和方法名以及方法上的特殊注解。上述步骤206并不关心强业务逻辑层方法内部具体业务处理逻辑。
可以理解,Java反射机制的核心是在程序运行时动态加载类并获取类的详细信息,包括对象及其属性和方法,从而可以进一步操作该对象的属性和方法。
在步骤208,建立上述对象属性信息与上述至少一个代码模板的至少一个变量的对应关系。
在本说明书的实施例中,在本步骤中,可以根据代码模板中各个变量的具体含义建立对象及其属性和方法与上述至少一个代码模板的至少一个变量的对应关系。例如,代码模板中的变量“controllerClass.serviceClassName”代表对象中方法的名称,因此,可以建立该变量与对象属性信息中方法名之间的对应关系;代码模板中的变量“controllerFunction.outArgName.typeName”代表对象中方法的输出参数,因此,可以建立该变量与对象属性信息中输出参数之间的对应关系;再例如,代码模板中的变量“inArgName.paraName”代表对象中方法的输入参数,因此,可以建立该变量与对象属性信息中输入参数之间的对应关系。
在步骤210,按照上述对应关系将上述对象属性信息填入上述至少一个代码模板中,生成与上述至少一个模板对应的源代码。
在本说明书的实施例中,在本步骤中,可以按照对象及其属性和方法与上述至少一个代码模板的至少一个变量的对应关系,将上述对象及其属性和方法分别填入上述至少一个代码模板中,生成业务层或控制层源代码。
具体地,在本说明书的实施例中,可以使用Freemark技术实现将上述至少一个变量填入代码模板的操作。
从上述实施例可以看出,通过上述代码生成方法可以从已编写的业务层代码中提取出编写其他业务层或控制层源代码所需的对象属性信息,然后将提取的对象属性信息作为预先设置的代码模板的变量填入代码模板中,可以直接得到与代码模板对应的业务层或控制层源代码。
下面就结合一个具体的示例详细说明本说明书实施例所述的代码生成方法。
下面显示了一段业务层代码的示例。
基于图2所示的代码生成方法,通过对上述代码进行文本解析,可以识别出上述代码的第21行@GeneratorController的代码,如此可知该方法需要生成对应的控制层代码。再通过对上述代码24行进行解析可以发现List<CavResultVO>为该方法的输出参数,List<CavInfoVO>cavInfoVOLst为该方法的输入参数,且其方法名为cavProcess。接下来,可通过Java反射技术获取其输出参数以及输入参数对象中的具体字段,并在相应的代码模板中进行输出参数以及输入参数中需特殊处理字段的赋值操作。从而生成如下所示的控制层的源代码。
对应上述图1所示的代码生成方法,本说明书的实施例还提供了一种代码生成器,其内部结构如图3所示,主要包括:
第一模板生成模块302,用于设置至少一个代码模板;其中,上述代码模板中包括至少一个变量。
在本说明书的一些实施例中,上述代码模板可以是DAO层的代码模板也可以是PO层的代码模板,这些代码模板是自动生成DAO层或PO层源代码的基础。
第一业务元数据获取模块304,用于获取创建数据表的SQL语句。
语义解析模块306,用于对上述创建数据表的SQL语句进行语义解析,获取其中的表信息。
第一代码生成模块308,用于建立上述表信息中的各个表信息参数与上述至少一个代码模板的至少一个变量的对应关系,并按照对应关系填入上述至少一个代码模板中,生成与上述至少一个模板对应的源代码。
从上述实施例可以看出,通过上述代码生成装置可以从创建数据表的SQL语句提取出编写PO层或DAO层源代码所需的表信息,然后将提取的表信息作为预先设置的代码模板的变量填入代码模板中,可以直接得到与代码模板对应的PO层或DAO层源代码。
对应上述图2所示的代码生成方法,本说明书的实施例还提供了一种代码生成器,其内部结构如图4所示,主要包括:
第二模板生成模块402,用于设置至少一个代码模板;其中,上述代码模板中包括至少一个变量。
在本说明书的一些实施例中,上述代码模板可以是业务层的代码模板也可以是控制层层的代码模板,这些代码模板是自动生成业务层和控制层源代码的基础。
第二业务元数据获取模块404,用于从业务层代码中获取用于生成源代码的强业务逻辑层代码。
具体地,在本说明书的实施例中,开发人员在进行代码编写的时候,会将上述强业务逻辑层代码进行标记。因此,通过文本解析的方式可以从业务层代码中解析出上述标记,从而确定可用于生成其他业务层或控制层源代码的强业务逻辑层代码。
解析模块406,用于对上述强业务逻辑层代码进行解析,获取上述强业务逻辑层代码中方法的对象属性信息。
在本说明书的实施例中,上述解析模块406用于对上述强业务逻辑层代码进行Java反射,得到上述强业务逻辑层代码中方法的对象属性信息。上述对象属性信息包括:对象及其属性和方法。
第二代码生成模块408,用于建立上述对象属性信息与上述至少一个代码模板的至少一个变量的对应关系,并按照对应关系填入上述至少一个代码模板中,生成与上述至少一个模板对应的源代码。
从上述实施例可以看出,通过上述代码生成装置可以从已编写的业务层代码中提取出编写其他业务层或控制层源代码所需的对象属性信息,然后将提取的对象属性信息作为预先设置的代码模板的变量填入代码模板中,可以直接得到与代码模板对应的业务层或控制层源代码。
可以看出,上述图1和图2所示的过程为由机器实现的自动过程或者上述图3或图4所示的代码生成器,可以替代人工编写这些代码的工作,从而可以减少开发人员的体力劳动,使开发人员不再关注业务逻辑性不强的代码编写,投入更多的精力在强业务逻辑代码的编写上,大幅度提高项目开发效率。通过实验可以发现,上述自动生成的源代码总量可以达到一个项目源代码总量的30%以上,因此,极大地提高了项目的开发效率。
此外,上述代码生成方法和代码生成器可应用到企业级批量代码的自动生成,运行稳定,质量有保证。且上述代码生成方法和代码生成器对代码规范实现了强控制,避免人为编写带来的编码风格、格式的差异,便于后期的统一维护。而且,如遇到项目后期表设计更改带来的较大调整,该生成工具更是方便快捷的实现了差异代码的替换,甚至可实现秒替换,不用再担心设计更改带来的项目工期遭遇延期的情况。
更进一步,上述代码生成方法和代码生成器还形成了一套关于可自动生成代码边界的理论体系,清晰定义了可通过工具自动生成的代码的边界范围,并通过一定规范约束很好的解决了生成代码与开发人员手动开发代码的无缝对接。
需要说明的是,本说明书一个或多个实施例的方法可以由单个设备执行,例如一台计算机或服务器等。本实施例的方法也可以应用于分布式场景下,由多台设备相互配合来完成。在这种分布式场景的情况下,这多台设备中的一台设备可以只执行本说明书一个或多个实施例的方法中的某一个或多个步骤,这多台设备相互之间会进行交互以完成上述的方法。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本说明书一个或多个实施例时可以把各模块的功能在同一个或多个软件和/或硬件中实现。
上述实施例的装置用于实现前述实施例中相应的方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
图5为本说明书实施例所提供的一种更为具体的电子设备硬件结构示意图,该设备可以包括:处理器510、存储器520、输入/输出接口530、通信接口540和总线550。其中,处理器510、存储器520、输入/输出接口530和通信接口540通过总线550实现彼此之间在设备内部的通信连接。
处理器510可以采用通用的CPU(Central Processing Unit,中央处理器)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的代码生成方法。
存储器520可以采用ROM(Read Only Memory,只读存储器)、RAM(Random AccessMemory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器520可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的代码生成方法时,相关的程序代码保存在存储器520中,并由处理器510来调用执行。
输入/输出接口530用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。
通信接口540用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信。
总线550包括一通路,在设备的各组件(例如,处理器510、存储器520、输入/输出接口530和通信接口540)之间传输信息。
需要说明的是,尽管上述设备仅示出了处理器510、存储器520、输入/输出接口530、通信接口540以及总线550,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。
本实施例的计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。
所属领域的普通技术人员应当理解:以上任何实施例的讨论仅为示例性的,并非旨在暗示本公开的范围(包括权利要求)被限于这些例子;在本公开的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,步骤可以以任意顺序实现,并存在如上所述的本说明书一个或多个实施例的不同方面的许多其它变化,为了简明它们没有在细节中提供。
另外,为简化说明和讨论,并且为了不会使本说明书一个或多个实施例难以理解,在所提供的附图中可以示出或可以不示出与集成电路(IC)芯片和其它部件的公知的电源/接地连接。此外,可以以框图的形式示出装置,以便避免使本说明书一个或多个实施例难以理解,并且这也考虑了以下事实,即关于这些框图装置的实施方式的细节是高度取决于将要实施本说明书一个或多个实施例的平台的(即,这些细节应当完全处于本领域技术人员的理解范围内)。在阐述了具体细节(例如,电路)以描述本公开的示例性实施例的情况下,对本领域技术人员来说显而易见的是,可以在没有这些具体细节的情况下或者这些具体细节有变化的情况下实施本说明书一个或多个实施例。因此,这些描述应被认为是说明性的而不是限制性的。
尽管已经结合了本公开的具体实施例对本公开进行了描述,但是根据前面的描述,这些实施例的很多替换、修改和变型对本领域普通技术人员来说将是显而易见的。例如,其它存储器架构(例如,动态RAM(DRAM))可以使用所讨论的实施例。
本说明书一个或多个实施例旨在涵盖落入所附权利要求的宽泛范围之内的所有这样的替换、修改和变型。因此,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何省略、修改、等同替换、改进等,均应包含在本公开的保护范围之内。
Claims (10)
1.一种方法代码生成,包括:
设置至少一个代码模板;其中,所述代码模板中包括至少一个变量;
获取创建数据表的结构化查询语言SQL语句;
对所述创建数据表的SQL语句进行语义解析,获取其中的表信息;其中,所述表信息可以包括至少一个表信息参数;
建立所述至少一个表信息参数与所述至少一个代码模板的至少一个变量的对应关系;以及
按照所述对应关系将所述表信息参数分别填入所述至少一个代码模板中,生成与所述至少一个模板对应的源代码。
2.根据权利要求1所述的方法,其中,所述至少一个代码模板包括:数据访问DAO层代码模板或持久对象PO层代码模板。
3.根据权利要求1所述的方法,其中,所述表信息参数包括:表名称、字段名、字段类型、字段长度以及字段的中文名称。
4.一种方法代码生成,包括:
设置至少一个代码模板;其中,所述代码模板中包括至少一个变量;
从业务层代码中获取用于生成源代码的强业务逻辑层代码;
对所述强业务逻辑层代码进行解析,获取所述强业务逻辑层代码中方法的对象属性信息;
建立所述对象属性信息与所述至少一个代码模板的至少一个变量的对应关系;以及
按照所述对应关系将所述对象属性信息填入所述至少一个代码模板中,生成与所述至少一个模板对应的源代码。
5.根据权利要求4所述的方法,其中,所述至少一个代码模板包括:控制层代码模板或业务层代码模板。
6.根据权利要求4所述的方法,其中,所述对所述强业务逻辑层代码进行解析包括:对所述强业务逻辑层代码进行Java反射,得到所述强业务逻辑层代码中方法的对象属性信息;其中,所述对象属性信息包括:输出参数、输入参数和方法名以及方法上的特殊注解。
7.一种代码生成器,包括:
第一模板生成模块,用于设置至少一个代码模板;其中,所述代码模板中包括至少一个变量;
第一业务元数据获取模块,用于获取创建数据表的结构化查询语言SQL语句;
语义解析模块,用于对所述创建数据表的SQL语句进行语义解析,获取其中的表信息;
第一代码生成模块,用于建立所述表信息中的各个表信息参数与所述至少一个代码模板的至少一个变量的对应关系,并按照所述对应关系填入所述至少一个代码模板中,生成与所述至少一个模板对应的源代码。
8.一种代码生成器,包括:
第二模板生成模块,用于设置至少一个代码模板;其中,所述代码模板中包括至少一个变量;
第二业务元数据获取模块,用于从业务层代码中获取用于生成源代码的强业务逻辑层代码;
解析模块,用于对所述强业务逻辑层代码进行解析,获取所述强业务逻辑层代码中方法的对象属性信息;
第二代码生成模块,用于建立所述对象属性信息与所述至少一个代码模板的至少一个变量的对应关系,并按照所述对应关系填入所述至少一个代码模板中,生成与所述至少一个模板对应的源代码。
9.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述程序时实现如权利要求1至7中任意一项所述的代码生成方法。
10.一种非暂态计算机可读存储介质,其中,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使所述计算机执行如权利要求1至7中任意一项所述的代码生成方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011459982.2A CN112463135A (zh) | 2020-12-11 | 2020-12-11 | 代码生成方法、代码生成器、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011459982.2A CN112463135A (zh) | 2020-12-11 | 2020-12-11 | 代码生成方法、代码生成器、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112463135A true CN112463135A (zh) | 2021-03-09 |
Family
ID=74803495
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011459982.2A Pending CN112463135A (zh) | 2020-12-11 | 2020-12-11 | 代码生成方法、代码生成器、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112463135A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113190264A (zh) * | 2021-04-29 | 2021-07-30 | 上海天好信息技术股份有限公司 | 一种基于jpa的自动化数据版本生成及应用的装置和方法 |
CN113238752A (zh) * | 2021-05-17 | 2021-08-10 | 北京达佳互联信息技术有限公司 | 代码生成方法、装置、电子设备及存储介质 |
CN113434133A (zh) * | 2021-08-27 | 2021-09-24 | 深圳市信润富联数字科技有限公司 | 应用搭建方法、装置、设备及计算机可读存储介质 |
CN114089976A (zh) * | 2022-01-21 | 2022-02-25 | 通联支付网络服务股份有限公司 | 用于生成数据库操作语句的方法、设备和介质 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040044989A1 (en) * | 2002-08-30 | 2004-03-04 | Thomas Vachuska | Apparatus and method using pre-described patterns and reflection to generate source code |
CN101697120A (zh) * | 2009-11-05 | 2010-04-21 | 河南辉煌科技股份有限公司 | 基于关系型数据库的j2ee代码生成方法 |
US20100218165A1 (en) * | 2009-02-26 | 2010-08-26 | International Business Machines Corporation | Optimizing code generation system with input data integration |
CN103631601A (zh) * | 2013-12-10 | 2014-03-12 | 北京中电普华信息技术有限公司 | 一种代码生成方法和装置 |
CN109359112A (zh) * | 2018-10-15 | 2019-02-19 | 行吟信息科技(上海)有限公司 | 一种代码的自动生成方法及代码生成器 |
CN109783084A (zh) * | 2019-01-18 | 2019-05-21 | 广州思坦德计算机信息科技有限公司 | 一种计算机代码自动生成方法、系统、装置和存储介质 |
CN110147225A (zh) * | 2019-04-02 | 2019-08-20 | 平安科技(深圳)有限公司 | 一种代码生成方法、装置及计算机设备、存储介质 |
CN110825369A (zh) * | 2019-11-07 | 2020-02-21 | 四川长虹电器股份有限公司 | 一种基于java语言的代码自动生成的方法 |
CN110989999A (zh) * | 2019-12-03 | 2020-04-10 | 望海康信(北京)科技股份公司 | 代码生成方法、装置、电子设备及介质 |
-
2020
- 2020-12-11 CN CN202011459982.2A patent/CN112463135A/zh active Pending
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040044989A1 (en) * | 2002-08-30 | 2004-03-04 | Thomas Vachuska | Apparatus and method using pre-described patterns and reflection to generate source code |
US20100218165A1 (en) * | 2009-02-26 | 2010-08-26 | International Business Machines Corporation | Optimizing code generation system with input data integration |
CN101697120A (zh) * | 2009-11-05 | 2010-04-21 | 河南辉煌科技股份有限公司 | 基于关系型数据库的j2ee代码生成方法 |
CN103631601A (zh) * | 2013-12-10 | 2014-03-12 | 北京中电普华信息技术有限公司 | 一种代码生成方法和装置 |
CN109359112A (zh) * | 2018-10-15 | 2019-02-19 | 行吟信息科技(上海)有限公司 | 一种代码的自动生成方法及代码生成器 |
CN109783084A (zh) * | 2019-01-18 | 2019-05-21 | 广州思坦德计算机信息科技有限公司 | 一种计算机代码自动生成方法、系统、装置和存储介质 |
CN110147225A (zh) * | 2019-04-02 | 2019-08-20 | 平安科技(深圳)有限公司 | 一种代码生成方法、装置及计算机设备、存储介质 |
CN110825369A (zh) * | 2019-11-07 | 2020-02-21 | 四川长虹电器股份有限公司 | 一种基于java语言的代码自动生成的方法 |
CN110989999A (zh) * | 2019-12-03 | 2020-04-10 | 望海康信(北京)科技股份公司 | 代码生成方法、装置、电子设备及介质 |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113190264A (zh) * | 2021-04-29 | 2021-07-30 | 上海天好信息技术股份有限公司 | 一种基于jpa的自动化数据版本生成及应用的装置和方法 |
CN113190264B (zh) * | 2021-04-29 | 2024-02-23 | 上海天好信息技术股份有限公司 | 一种基于jpa的自动化数据版本生成及应用的装置和方法 |
CN113238752A (zh) * | 2021-05-17 | 2021-08-10 | 北京达佳互联信息技术有限公司 | 代码生成方法、装置、电子设备及存储介质 |
CN113434133A (zh) * | 2021-08-27 | 2021-09-24 | 深圳市信润富联数字科技有限公司 | 应用搭建方法、装置、设备及计算机可读存储介质 |
CN113434133B (zh) * | 2021-08-27 | 2022-02-15 | 深圳市信润富联数字科技有限公司 | 应用搭建方法、装置、设备及计算机可读存储介质 |
CN114089976A (zh) * | 2022-01-21 | 2022-02-25 | 通联支付网络服务股份有限公司 | 用于生成数据库操作语句的方法、设备和介质 |
CN114089976B (zh) * | 2022-01-21 | 2022-04-26 | 通联支付网络服务股份有限公司 | 用于生成数据库操作语句的方法、设备和介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110825362B (zh) | 低代码应用软件开发系统及方法 | |
CN111241454B (zh) | 一种生成网页代码的方法、系统和装置 | |
US9465590B2 (en) | Code generation framework for application program interface for model | |
CN112463135A (zh) | 代码生成方法、代码生成器、电子设备及存储介质 | |
US10417314B2 (en) | Systems and methods of a script generation engine | |
US8756568B2 (en) | Documentation generation for web APIs based on byte code analysis | |
US8997070B2 (en) | Extension mechanism for scripting language compiler | |
US8856732B2 (en) | System and method for creating, managing, and reusing schema type definitions in services oriented architecture services, grouped in the form of libraries | |
US20030188293A1 (en) | Method, system, and program for translating a class schema in a source language to a target language | |
US20040158820A1 (en) | System for generating an application framework and components | |
CN103631601A (zh) | 一种代码生成方法和装置 | |
CN102236544B (zh) | 一种皮肤设计方法及装置 | |
Pagán et al. | Querying large models efficiently | |
US10666744B2 (en) | Managing discovery and selection of service interface specifications | |
US9646004B2 (en) | Hierarchical database report generation with automated query generation for placeholders | |
CN113448562B (zh) | 一种逻辑代码自动生成方法、装置和电子设备 | |
CN109460546A (zh) | 表单生成方法、装置及电子设备 | |
US9280361B2 (en) | Methods and systems for a real time transformation of declarative model and layout into interactive, digital, multi device forms | |
CN101794223A (zh) | Wade服务消息架构的设计方法 | |
KR101902191B1 (ko) | 질의 기반 소프트웨어 논리의 동적 변경 및 실행을 위한 멀티테넌트 지원 장치 및 방법 | |
US11977473B2 (en) | Providing a pseudo language for manipulating complex variables of an orchestration flow | |
CN113342399A (zh) | 应用项目的结构配置方法、装置及可读存储介质 | |
CN112487773A (zh) | 一种报表生成方法、装置、设备及存储介质 | |
CN112181398A (zh) | 配置文件处理装置、方法及存储介质 | |
Kosanović et al. | Applang–A DSL for specification of mobile applications for android platform based on textX |
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 |