CN114281342A - 一种代码自动生成方法 - Google Patents
一种代码自动生成方法 Download PDFInfo
- Publication number
- CN114281342A CN114281342A CN202111641075.4A CN202111641075A CN114281342A CN 114281342 A CN114281342 A CN 114281342A CN 202111641075 A CN202111641075 A CN 202111641075A CN 114281342 A CN114281342 A CN 114281342A
- Authority
- CN
- China
- Prior art keywords
- code
- template
- data
- service
- file
- 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
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种代码自动生成方法,与现有技术相比解决了代码编写不规范、开发效率低的缺陷。本发明包括以下步骤:基础代码的自动生成:以数据库为数据来源,根据数据库中的表结构生成单表操作的代码;业务代码的自动生成:以设计文档为数据来源,将其组装成模板数据自动生成代码。本发明能够根据模板自动生成代码,有利于代码规范及设计文档规范化,减少了基础代码漏洞发生的概率,有效避免代码中缺少注释的问题,同时避免了维护脚本和基础数据问题。
Description
技术领域
本发明涉及数据处理技术领域,具体来说是一种代码自动生成方法。
背景技术
在数据处理领域中,新员工对于公司的前台组件不熟悉,对框架理解不够,无法正确使用框架已提供的公共方法。同时,在实际开发过程中编写的代码不符合规范、风格不统一、注释不足、开发效率低;后台程序员对于前端的语法不熟悉,而且前端控件的属性也比较多,在使用控件的过程中经常会遇到属性不知道如何设置。开发中也有许多套用模板的基础代码,这些代码不涉及实际的业务逻辑,但是会占用一部分的开发时间。
针对以上问题,应该提供一套能够让新员工快速入门、提高老员工开发效率的代码生成工具,让开发人员只需要关注核心业务逻辑。即能提高开发效率节约约成本,也可以使代码更规范提高代码质量减少BUG发生率。
发明内容
本发明的目的是为了解决现有技术中代码编写不规范、开发效率低的缺陷,提供一种代码自动生成方法来解决上述问题。
为了实现上述目的,本发明的技术方案如下:
一种代码自动生成方法,包括以下步骤:
基础代码的自动生成:以数据库为数据来源,根据数据库中的表结构生成单表操作的代码;
业务代码的自动生成:以设计文档为数据来源,将其组装成模板数据自动生成代码。
所述基础代码的自动生成包括以下步骤:
根据文件类型利用模板引擎Velocity调用基础模板文件,其中实体类Entity、Mapper接口、sqlmap.xml文件调用对应的基础模板文件;
从数据库中获取表结构信息,通过jdbc连接获取指定schema下表的元数据,根据元数据中的字段名、字段类型和注释信息组装为基础模板使用的数据;
将基础模板使用的数据代入基础模板文件,调用模板引擎Velocity嵌套方法,生成对应的代码文件并保存到磁盘中。
所述业务代码的自动生成包括以下步骤:
利用Freemarker模板引擎编辑业务模板文件,其包括SQL、HTML、JavaScript、Java、XML和PROPERTIES模板;
针对SQL模板生成使用到的基础数据脚本,其包括画面、画面元素、权限控制、流程控制的基础数据,生成page_dml.ftl文件;
针对HTML生成符合html5规范的thymeleaf的html模板文件,针对JavaScript生成规范的JS模板,针对Java生成规范的JAVA模板,针对XML生成规范的XML模板,针对PROPERTIES生成规范的PROPERTIES模板示例;
获取数据进行解析设计文档:设计文档为excel格式;
将业务模板使用的数据代入业务模板文件,调用模板引擎Velocity嵌套方法,生成对应的代码文件并保存到磁盘中。
获取数据进行解析设计文档包括以下步骤:
设计文档由excel、后缀为xlsx文档编写而成,同一个设计文档中按照不同的sheet划分为列表和详情页,其它sheet服务于这两个页面,完整的设计书包括若干个sheet页;
此sheet页包括操作区、查询条件区和查询结果区,分别对应列表画面的操作按钮组、查询条件表单和查询结果表格;操作区定义的按钮通过后续的“查询画面_事件名”这种命名规则的sheet来自定义事件,查询条件区域的控件的数据来源选择在设置为数据字典时必须指定字典代码,如果设置rest接口作为数据来源,则必须填写正确的接口地址,请求方式固定为GET;此处定义的rest接口对应的后台代码不属于工具的生成范围,查询结果区域则设置每个字段的展现形式,即可查阅“基础数据”;
对设计文档中的关键字进行说明;
设定查询画面_查询SQL,此sheet命名根据下划线解析为两部分,下划线之前为功能画面,之后的则为具体的实现逻辑命名;
为业务校验逻辑:首先使用公共校验方法来校验数据合法性及流程是否存在;其次生成流程引擎的必要参数;再次为流程引擎启动时的回调处理逻辑,删除操作的流程启动时不需要做任务处理,设计文档中此处留空;最后为流程完成时的处理逻辑,此处仅需要删除相关表数据即可;
设定校验逻辑编写规则:先写上需要校验的条件表达式,然后另起一行写出“NG条件:”(触发校验失败)的条件表达式,同时再新起一行写出“错误消息:”,错误消息中的BUSS_COM_E_004为多语言的消息代码,这三行将组成业务校验逻辑,校验逻辑之间用空行分隔;
设定流程发起参数:设定业务编码、业务类型、业务说明、业务主键流程引擎的必要参数;
设定流程审批结束处理逻辑:流程审批通过后的业务处理,流程的驳回和作废由框架自动处理,流程审批通过后,对每一个数据库表的处理用一个单独的表格来表述,表格之间用空行分隔,表头区域部分写明数据库表名、表格操作方式、别名,别名与实体类对应。
有益效果
本发明的一种代码自动生成方法,与现有技术相比能够根据模板自动生成代码,有利于代码规范及设计文档规范化,减少了基础代码漏洞发生的概率,有效避免代码中缺少注释的问题,同时避免了维护脚本和基础数据问题。本发明提高了开发效率,使开发人员能够将有限的时间用在关键的逻辑上,方便产品的后期维护及可持续发展。
附图说明
图1为本发明的方法顺序图。
具体实施方式
为使对本发明的结构特征及所达成的功效有更进一步的了解与认识,用以较佳的实施例及附图配合详细的说明,说明如下:
在实际应用中,公司的代码生成工具被拆分为两个部分,基础代码生成工具和业务代码生成工具。
基础代码生成工具以数据库作为数据来源,根据数据库中已设计好的表结构生成单表操作的代码。基础代码生成后,大量的实体类编写,单表增删改查SQL编写等基础工作都可以省略,能减少很大一部分开发工作量。即便如此,开发者还将面临这大量的业务逻辑编写,正确率和规范性仍然不够。业务代码生成工具可以很好的解决这个问题,简单的业务逻辑可保证90%可用,复杂业务逻辑做到60%到70%可用。
基础代码生成工具:主要是根据数据表结构生成单表操作的Mybatis相关代码。此工具为每个库表生成实体类、数据层接口、Mybatis的mapper文件;工具将生成的代码放到单独的package中,强制不允许修改,一旦表结构发生变更,重新生成即可。
业务代码生成工具:此处生成代码的数据来源为详细设计文档,由设计人员编写设计文档,文档越规范越详尽生成的代码会越准确。工具提供了一个设计文档的模板,设计人员需要使用此模板编写设计,设计人员无法确定使用的控件可交由开发补充,开发人员完善设计文档后,使用工具生成业务代码,进行自测及简单修改,但需要保持已有的代码结构。在确保业务代码运行正常后方可提交代码和文档到版本库,完成业务功能开发。
设计文档获取数据就需要解析设计文档,解析的准确性尤为重要,所以对于设计文档由一定的格式要求,而且设计文档必须是excel。设计文档是按照关键字驱动的模式来解析的,工具内置了一些关键字,同时也支持添加新的关键字。设计人员编写设计文档时必须遵守以上的规则。解析的顺序是按照sheet页区分,从左到右自上而下的顺序,按行解析,最终将解析后的数据包装为各种不同的对象。数据库同基础代码生成时的使用方式差不多,通过jdbc获取数据库的元数据信息,提取其表名、字段名、字段类型等放入缓存备用。此处设计的缓存是为了提升工具性能,在表结构发现变化时不支持自动更新缓存,需要点击工具的更新缓存功能。
如图1所示,本发明所述的一种代码自动生成方法,包括以下步骤:
第一步,基础代码的自动生成:以数据库为数据来源,根据数据库中的表结构生成单表操作的代码。基础代码来自数据库也服务于数据库,这样的设计是为了抓住本质,既保证操作简单又能适应各种变化。当有表结构变动时,无论改动大小,最终都将会反映到数据库上,此时仅需要重新生成一次基础代码即可。
基础代码的自动生成具体步骤如下:
(1)根据文件类型利用模板引擎Velocity调用基础模板文件,其中实体类Entity、Mapper接口、sqlmap.xml文件调用对应的基础模板文件。
(2)从数据库中获取表结构信息,通过jdbc连接获取指定schema下表的元数据,根据元数据中的字段名、字段类型和注释信息组装为基础模板使用的数据。
(3)将基础模板使用的数据代入基础模板文件,调用模板引擎Velocity嵌套方法,生成对应的代码文件并保存到磁盘中。
第二步,业务代码的自动生成:业务代码生成相对基础代码要复杂,在此以设计文档为数据来源,将其组装成模板数据自动生成代码,所涉及的业务代码自动生成模板如表1所示。
表1业务代码自动生成模板列表
业务代码需要处理的逻辑比较复杂,主要分为两大块:前台和后台。一个业务逻辑,就需要生成前台代码(HTML、JS)和后台代码(SQL脚本、JAVA接口及实现类、多语言文件、mybatis的Mapper文件)。前台代码需要考虑各种控件、排版布局和数据校验,同时还需要考虑各控件之间的联动关系以及各种事件所触发的业务逻辑。后台代码需要根据业务逻辑进行数据有效性检查和业务逻辑校验。由于业务代码中使用流程驱动的模式,所有的业务代码都需要考虑到工作流的完整流程,需要生成流程生命周期函数的实现并填充上对应的业务逻辑。为了解决前后台业务逻辑的不确定性,尽可能多的获取确定的逻辑,工具提供了一个设计文档模板。使用已提供的关键字并按照固定格式填写好的设计模板能被翻译为准确的业务代码,关键字库越丰富业务逻辑解析的准确度越高。
业务代码的自动生成包括以下步骤:
(1)利用Freemarker模板引擎编辑业务模板文件,其包括SQL、HTML、JavaScript、Java、XML、EXCEL和PROPERTIES模板。
(2)针对SQL模板生成使用到的基础数据脚本,其包含了画面、画面元素、权限控制、流程控制的基础数据,生成page_dml.ftl文件。
(3)针对HTML生成符合html5规范的thymeleaf的html模板文件,针对JavaScript生成规范的JS模板,针对Java生成规范的JAVA模板,针对XML生成规范的XML模板,针对PROPERTIES生成规范的PROPERTIES模板示例。
(4)获取数据进行解析设计文档:设计文档为excel格式。
获取数据进行解析设计文档包括以下步骤:
A1)设计文档由excel文档编写而成,同一个设计文档中按照不同的sheet划分为列表和详情页,其它sheet主要是服务与这两个页面,完整的设计书会若干个sheet页;
此Sheet页包括操作区、查询条件区和查询结果区,分别对应列表画面的操作按钮组、查询条件表单和查询结果表格;操作区定义的按钮通过后续的“查询画面_事件名”这种命名规则的sheet来自定义事件,查询条件区域的控件的数据来源选择在设置为数据字典时必须指定字典代码,如果设置rest接口作为数据来源,则必须填写正确的接口地址,请求方式固定为GET;此处定义的rest接口对应的后台代码不属于工具的生成范围,查询结果区域则需要设置每个字段的展现形式,即可查阅“基础数据”。
A2)对设计文档中的关键字进行说明。
A3)设定查询画面_查询SQL,此sheet命名根据下划线解析为两部分,下划线之前为功能画面,之后的则为具体的实现逻辑命名。
A4)为业务校验逻辑:首先使用公共校验方法来校验数据合法性及流程是否存在;其次生成流程引擎的必要参数;再次为流程引擎启动时的回调处理逻辑,删除操作的流程启动时不需要做任务处理,设计文档中此处留空;最后为流程完成时的处理逻辑,此处仅需要删除相关表数据即可。
A5)设定校验逻辑编写规则:先写上需要校验的条件表达式,然后另起一行写出“NG条件:”(触发校验失败)的条件表达式,同时再新起一行写出“错误消息:”,错误消息中的BUSS_COM_E_004为多语言的消息代码,这三行将组成业务校验逻辑,校验逻辑之间用空行分隔。
A6)设定流程发起参数:业务编码、业务类型、业务说明、业务主键这些流程引擎必要参数。
A7)设定流程审批结束处理逻辑:流程审批通过后的业务处理,流程的驳回和作废是由框架自动处理,流程审批通过后,对每一个数据库表的处理都需要用一个单独的表格来表述,表格之间需要用空行分隔,表头区域部分必须写明数据库表名、表格操作方式、别名,别名与实体类对应。
(5)将业务模板使用的数据代入业务模板文件,调用模板引擎Velocity嵌套方法,生成对应的代码文件并保存到磁盘中。
在逻辑概述上,先设计文档解析步骤:调用缓存加载器(数据库表结构缓存、数据字典缓存)、初始化模板解析器(画面解析器、SQL解析器、事件解析器)、读入设计文档、调用解析器、生成后的数据传入上下文。再生成代码文件、获取上下文中的数据,将数据代入代码生成引擎,生成代码字符串,放入内存暂存。最后代码格式化:将代码字符串调用格式化方法,格式化后的代码写入文件。
在实际应用中,首先:数据库设计人员做好设计并生成pdm文件,业务设计人员填写设计文档模板;其次:将pdm导入数据库,使用基础代码生成工具生成基础代码。开发人员补充并完善设计文档模板,然后使用业务代码生成工具生成业务代码。检查并补充生成的业务代码中TODO部分逻辑;最后:开发人员自测并提交代码。
以上显示和描述了本发明的基本原理、主要特征和本发明的优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是本发明的原理,在不脱离本发明精神和范围的前提下本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明的范围内。本发明要求的保护范围由所附的权利要求书及其等同物界定。
Claims (4)
1.一种代码自动生成方法,其特征在于,包括以下步骤:
11)基础代码的自动生成:以数据库为数据来源,根据数据库中的表结构生成单表操作的代码;
12)业务代码的自动生成:以设计文档为数据来源,将其组装成模板数据自动生成代码。
2.根据权利要求1所述的一种代码自动生成方法,其特征在于,所述基础代码的自动生成包括以下步骤:
21)根据文件类型利用模板引擎Velocity调用基础模板文件,其中实体类Entity、Mapper接口、sqlmap.xml文件调用对应的基础模板文件;
22)从数据库中获取表结构信息,通过jdbc连接获取指定schema下表的元数据,根据元数据中的字段名、字段类型和注释信息组装为基础模板使用的数据;
23)将基础模板使用的数据代入基础模板文件,调用模板引擎Velocity嵌套方法,生成对应的代码文件并保存到磁盘中。
3.根据权利要求1所述的一种代码自动生成方法,其特征在于,所述业务代码的自动生成包括以下步骤:
31)利用Freemarker模板引擎编辑业务模板文件,其包括SQL、HTML、JavaScript、Java、XML和PROPERTIES模板;
32)针对SQL模板生成使用到的基础数据脚本,其包括画面、画面元素、权限控制、流程控制的基础数据,生成page_dml.ftl文件;
33)针对HTML生成符合html5规范的thymeleaf的html模板文件,针对JavaScript生成规范的JS模板,针对Java生成规范的JAVA模板,针对XML生成规范的XML模板,针对PROPERTIES生成规范的PROPERTIES模板示例;
34)获取数据进行解析设计文档:设计文档为excel格式;
35)将业务模板使用的数据代入业务模板文件,调用模板引擎Velocity嵌套方法,生成对应的代码文件并保存到磁盘中。
4.根据权利要求3所述的一种代码自动生成方法,其特征在于,获取数据进行解析设计文档包括以下步骤:
41)设计文档由excel、后缀为xlsx文档编写而成,同一个设计文档中按照不同的sheet划分为列表和详情页,其它sheet服务于这两个页面,完整的设计书包括若干个sheet页;
此sheet页包括操作区、查询条件区和查询结果区,分别对应列表画面的操作按钮组、查询条件表单和查询结果表格;操作区定义的按钮通过后续的“查询画面_事件名”这种命名规则的sheet来自定义事件,查询条件区域的控件的数据来源选择在设置为数据字典时必须指定字典代码,如果设置rest接口作为数据来源,则必须填写正确的接口地址,请求方式固定为GET;此处定义的rest接口对应的后台代码不属于工具的生成范围,查询结果区域则设置每个字段的展现形式,即可查阅“基础数据”;
42)对设计文档中的关键字进行说明;
43)设定查询画面_查询SQL,此sheet命名根据下划线解析为两部分,下划线之前为功能画面,之后的则为具体的实现逻辑命名;
44)设定业务校验逻辑:首先使用公共校验方法来校验数据合法性及流程是否存在;其次生成流程引擎的必要参数;再次为流程引擎启动时的回调处理逻辑,删除操作的流程启动时不做任务处理,设计文档中此处留空;最后为流程完成时的处理逻辑,此处仅删除相关表数据即可;
45)设定校验逻辑编写规则:先写上需要校验的条件表达式,然后另起一行写出“NG条件:”触发校验失败的条件表达式,同时再新起一行写出“错误消息:”,错误消息中的BUSS_COM_E_004为多语言的消息代码,这三行将组成业务校验逻辑,校验逻辑之间用空行分隔;
46)设定流程发起参数:设定业务编码、业务类型、业务说明、业务主键流程引擎的必要参数;
47)设定流程审批结束处理逻辑:流程审批通过后的业务处理,流程的驳回和作废由框架自动处理,流程审批通过后,对每一个数据库表的处理用一个单独的表格来表述,表格之间用空行分隔,表头区域部分写明数据库表名、表格操作方式、别名,别名与实体类对应。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111641075.4A CN114281342A (zh) | 2021-12-29 | 2021-12-29 | 一种代码自动生成方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111641075.4A CN114281342A (zh) | 2021-12-29 | 2021-12-29 | 一种代码自动生成方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114281342A true CN114281342A (zh) | 2022-04-05 |
Family
ID=80878193
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111641075.4A Pending CN114281342A (zh) | 2021-12-29 | 2021-12-29 | 一种代码自动生成方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114281342A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115586896A (zh) * | 2022-09-29 | 2023-01-10 | 通号智慧城市研究设计院有限公司 | 基于模板引擎的页面项目开发方法、设备及存储介质 |
CN116841526A (zh) * | 2023-09-01 | 2023-10-03 | 北京杰软科技有限公司 | 基于VUE和Ant-Design生成兼容多种数据库的代码生成方法 |
CN117453229A (zh) * | 2023-12-26 | 2024-01-26 | 天津戎行集团有限公司 | 一种用于自动代码生成数据库的输出代码解析方法 |
-
2021
- 2021-12-29 CN CN202111641075.4A patent/CN114281342A/zh active Pending
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115586896A (zh) * | 2022-09-29 | 2023-01-10 | 通号智慧城市研究设计院有限公司 | 基于模板引擎的页面项目开发方法、设备及存储介质 |
CN115586896B (zh) * | 2022-09-29 | 2023-08-04 | 通号智慧城市研究设计院有限公司 | 基于模板引擎的页面项目开发方法、设备及存储介质 |
CN116841526A (zh) * | 2023-09-01 | 2023-10-03 | 北京杰软科技有限公司 | 基于VUE和Ant-Design生成兼容多种数据库的代码生成方法 |
CN117453229A (zh) * | 2023-12-26 | 2024-01-26 | 天津戎行集团有限公司 | 一种用于自动代码生成数据库的输出代码解析方法 |
CN117453229B (zh) * | 2023-12-26 | 2024-02-23 | 天津戎行集团有限公司 | 一种用于自动代码生成数据库的输出代码解析方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107861728B (zh) | 用于传统程序语言向现代程序语言转换的方法及其系统 | |
CN114281342A (zh) | 一种代码自动生成方法 | |
JP2602205B2 (ja) | データベース・アクセス制御方法 | |
US7324992B2 (en) | Database processing method and system | |
CN108762743B (zh) | 一种数据表操作代码生成方法及装置 | |
CN1619546A (zh) | 文本的标号系统-翻译和在运行时间的多语言支持以及设计 | |
US20080313208A1 (en) | Apparatus, system, and method for automated context-sensitive message organization | |
CN111694846B (zh) | 一种基于Type 2 JDBC驱动的分离模式分布式存储过程实现方法 | |
CN112231407B (zh) | PostgreSQL数据库的DDL同步方法、装置、设备和介质 | |
CN1976320B (zh) | 数据访问控制方法及系统 | |
CN111475150B (zh) | 一种跨语言绑定方法、装置、设备及存储介质 | |
CN114238527A (zh) | 基于对象关系映射的数据处理方法和数据处理装置 | |
CN109947711B (zh) | 一种对ios项目开发过程中的多语言文件自动化管理方法 | |
CN111782195B (zh) | 一种基于在请求参数上添加注解拼接成sql的查询方法 | |
CN113703777A (zh) | 基于数据库表的代码生成方法、装置、存储介质和设备 | |
CN113761040A (zh) | 数据库与应用程序双向映射方法、设备、介质及程序产品 | |
CN113138755A (zh) | 一种json序列化和反序列化的优化方法及系统 | |
CN114764558A (zh) | 一种sql方言转换方法、装置、系统及存储介质 | |
CN116955393A (zh) | 一种数据处理方法、装置、电子设备及存储介质 | |
CN115713309A (zh) | 内审系统 | |
CN106033338A (zh) | 基于fog数据的源代码导入及解析的方法和装置 | |
Mihalj et al. | Code Generator for ADAS Software Testing | |
Dhakal et al. | Library Tweets Conversion | |
KR100656559B1 (ko) | Bibd 방법론을 이용하는 프로그램 자동 개발 장치 | |
CN117331963B (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 |