CN115437616A - 一种基于JPA的Web代码自动生成*** - Google Patents
一种基于JPA的Web代码自动生成*** Download PDFInfo
- Publication number
- CN115437616A CN115437616A CN202210915663.0A CN202210915663A CN115437616A CN 115437616 A CN115437616 A CN 115437616A CN 202210915663 A CN202210915663 A CN 202210915663A CN 115437616 A CN115437616 A CN 115437616A
- Authority
- CN
- China
- Prior art keywords
- code
- jpa
- annotation
- template
- annotations
- 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
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/315—Object-oriented languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/166—Editing, e.g. inserting or deleting
- G06F40/186—Templates
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/73—Program documentation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Library & Information Science (AREA)
- Computer Security & Cryptography (AREA)
- Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- Computing Systems (AREA)
- Stored Programmes (AREA)
Abstract
本发明提供了一种基于JPA的Web代码自动生成***,包括JPA客户端、代码生成服务器、Java后端服务模块、Vue前端服务模块;***将JPA技术与模板技术想结合,可以一次性批量根据JPA的类生成数据库表、Web应用***的前后端。大幅度提高开发效率。用户调整需求的时候,修改类的属性,重新一键生成非常方便。
Description
技术领域
本发明属于业务软件开发领域,尤其涉及一种基于JPA的Web代码自动生成***。
背景技术
业务***的开发有需求分析、页面原型设计、软件结构设计、数据库设计、代码开发、测试等过程。每一次需求迭代的周期一般要以周为单位。同时业务需求的多变性导致项目要经过多个迭代版本之后,才能交付运行。当前的开发方式,实现的周期长,多工种配合。交付的质量不高,输出的稳定性具有不确定性,开发的周期较长。严重影响项目交付的效率。
发明内容
发明目的:本发明所要解决的技术问题是针对现有技术的不足,提供一种基于JPA的Web代码自动生成***,***将JPA技术与模板技术想结合,可以一次性批量根据JPA的类生成数据库表、Web应用***的前后端。大幅度提高开发效率。用户调整表结构或属性的时候,重新一键可以大幅度提高开发效率。
包括客户端、代码生成服务器、部署后端服务模块、部署前端服务模块;
JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,可以在项目初始化的时候,自动根据注解生成关系数据表。
所述客户端用于:利用JPA的注解实现数据库表的自动生成;自定义用户注解实现模板生成所需要的各变量的输入;将用户输入的属性及注解组合成JSON格式,发给代码生成服务器,由代码生成服务器解析JSON之后,结合代码模板生成全套代码;
所述代码生成服务器用于:采用Freemaker模板设计前、后端模板代码;并根据客户端传递的参数,与模板合并生成全套代码;
所述部署后端服务模块用于部署应用***,接受代码生成服务器传递过来的根据模板及参数合并生成的文件,并分发到指定的代码位置,并且配置菜单和权限;
所述部署前端服务模块用于接受代码生成服务器传递过来的前端文件,分发到指定的前端代码位置。
所述客户端启动的时候,自动扫描指定目录下的带有用户注解的类;用户在使用客户端时,在编辑器环境中,新建一个类,新建的类中增加自定义的各种属性;
注解包括JPA自带的注解和用户自定义注解。
所述JPA自带的注解包括JPA框架中类上的注解和JPA框架中属性上的注解;
所述JPA框架中类上的注解,具体包括:
@Entity:用于JPA实体与表的对应关系建立;是Java Persistence API中定义的一种注解。说明这个class是实体类,并且使用默认的ORmapping规则,即class名就是数据库表中表名,class字段名即表中字段名。@Entity注解指明这是一个实体Bean;
@Table:如果用户需要单独定义数据库中生成的表名,注解@Table能够覆盖@Entity默认的表名;该注解@Table指定了Entity所要映射带数据库表,其中@Table.name()用来指定映射表的表名。声明此对象映射到数据库的数据表,通过它可以为实体指定表(talbe),目录(Catalog)和schema的名字;
所述JPA框架中属性上的注解,具体包括:
@ID:用于指定属性映射为数据库主键;
@Column:用于指定属性对应的数据库字段定义的时候类型;
用户自定义注解包括类上的注解和属性上的注解;
所述类上的注解,具体包括:
@WVo注解:用于指定代码生成的目标位置,包名,模板类型;
@TVo注解:用于确定表的描述,是否是树结构;
所述属性上的注解,具体包括:
@PageVo:用于指定页面生成的时候字段在页面中表现的属性;
@ValidateTo:用于指定在页面生成的时候验证的条件;
根据代码生成服务端中代码结构的变化、前端展现形式的变化,未来可能扩展用户自定义的其他注解。
所述客户端通过责任链模式,解析各种注解后,将解析后的结果组成对象,进行序列化,发送到代码生成服务端,然后启动类继承SpringBoot容器中的ApplicationRunner,在SpringBoot容器启动的时候,执行客户端的数据库表自动生成,并扫描自定的目录,采用反射方式进行注解解析,并将生成的JSON格式的文件通过调用远程服务的方式发送到代码生成服务端。
在解析各种类型注解的时候,每个注解采用一个独立的类进行处理,然后用一个责任链将所有的处理类链接起来。这种处理方式,扩展性强,增加新的注解的时候,只有增加一个新的类就可以,符合面向对象的开闭原则。
后端是服务端,后端模板代码是基于SpringBoot+Mybatis的框架多层结构代码;前端模板代码是基于Vue2.0框架代码;
后端SpringBoot多层结构代码程序变化的参数包括:是否主键、包名、实体名称、表名、表注释、字段名称、字段注释;
前端Vue页面变化的参数包括:字段在页面表现对应的类型:有文本框、下拉框、单选框、富文本、文件、日期等常用的页面控件类型;
将前端、后端变化的参数部分定义为JSON数据格式;
代码生成服务端接受客户端生成的JSON文件,进行反序列化,将JSON的数据转换为Map的key、Value数据,Map数据与Freemaker的模板结合,利用Freemaker的模板引擎将Map集合中的部分替换掉Freemaker模板中变化点,生成前后端代码;同时将生成的前后端代码,分发到部署***中。
有益效果:本发明***将JPA注解,自定义注解,代码模板等多个技术深度融合,实现一键发布的功能,极大提高开发效率;
采用开发人员日常的开发环境中,用户只要创建类,并输入类中的属性,然后在该类中,添加JPA注解及自定义注解。执行运行后,生成数据库表、全套的前后端***,并部署到应用服务器中,重启部署的***之后,能够立即被访问。这种开发模式,大幅度提高了开发效率,极大的缩短了开发周期。
拥抱变化:开发过程中,业务需求经常进行变化,每次变化需要重新进行设计,开发,测试等过程。采用该工具之后,如果表增加调整,表中字段属性增加,删除,调整等,可以重新进行生成。***自动将上一个版本进行覆盖。可以在短时间内,重新部署新版本。
降低开发人员的要求,由业务领导专家可以进行建模,并生成全套***,大幅度降低开发过程中的各种沟通成本。
附图说明
下面结合附图和具体实施方式对本发明做更进一步的具体说明,本发明的上述和/或其他方面的优点将会变得更加清楚。
图1是本发明***整体架构图。
图2是实施例重新启动服务器后的示意图。
图3是前端界面的示意图。
图4是客户端需要生成的WebModelVO的类结构示意图。
具体实施方式
如图1所示,本发明提供了一种基于JPA的Web代码自动生成***,包括客户端、代码生成服务器、部署后端服务模块、部署前端服务模块。
所述客户端用于:
自定义用户注解实现信息的输入;
利用JPA的注解实现数据库表的生成;
客户端启动的时候,自动扫描指定目录下的带有用户注解的类;
通过责任链模式,解析各种注解,形成JSON格式的数据,发送到代码生成服务器;具体的实现方式
1、JPA自带的注解
为了将领域模型自带生成数据库表,需要JPA自带注解:@Entity,@Table,@Column,JPA根据这些注解,可自带生成数据库表;
2、类上的定义注解
2.1 WVO注解
代码生成器生成代码的时候,需要指定代码包名、模板名称。
在类上自定义WVO注解,由用户指定这3个名称。如用户不指定,在注解中采用默认设置的方式。
格式如下:
2.2 TVO注解
代码模板定义的时候,将实体名称,表名称,表说明作为变化的参数。同时,针对树的生成模板,有主键,ParentId等变化的参数;
格式如下:
为支持用户默认设置,注解上都有默认值。但Wvo注解不能省略。它作为被程序扫描处理的一个标记。
3、属性上的自定义注解
前端Vue模板的设计:Web页面的特征可以抽象为2个页面,一个页面为列表显示,第二个页面是新增或更新页面。
第一个页面分为如下3个区域:
第一部分为查询区域,某个属性字段如果要在查询区域进行显示,那么就在注解中,输入这个信息。
第二个部分为按钮区域,有新增,导入、导出等,这些内容不变化。
第三部分为列表区域,数据库中的记录查询之后,各字段列表显示在这个部分。
3.1 PageVo注解
在列表页面,需要用户输入的参数:在查询区是否显示,在列表区是否显示;
在新增或更新的页面,需要用户输入的参数:
该字段在页面是否展现;
该字段在页面中的展现形式,如文本框、下拉框、富文本等多种形式。
该字段在页面中读取权限,如是否仅仅显示,或可以读写,格式如下:
3.2@ValidateVo注解
字段在页面上选择的内容,来源与数据库中的某个表中的某个列。
4、解析注解
4.1解析类上的注解
类上定义的注解有JPA的注解@TableName,也有自定义的注解@WVO,@TVO,并且注解未来可能会扩展。在设计的时候,采用责任链的设计模式;
每个注解对应一个独立的类进行解析。解析的结果保存到WebModelVo中,格式如下:
4.2解析属性上的注解
属性上定义的注解有JPA的注解@Column,@ID,也有自定义的注解@PageVo,@ValidateVo。与类上注解的解析方式类似,也采用责任链的设计模式,每个注解采用一个独立的类进行解析。格式如下:
5、启动类的实现
启动类继承ApplicationRunner接口。在该接口实现中,扫描固定的一个目录,将该目录下,包含子目录的所有类的class文件进行反射解析。将解析的结果写入到WebModelVo的对象中。
启动的入口:
启动类继承ApplicationRunner
public class CodeService implements ApplicationRunner{}
根据SpringBoot的运行机制,在启动类在SpringBoot启动程序的最后环节,之前的启动步骤已经执行。可以获取到前面环境已经编译好的类及注解。
5.1获取指定目录下的class文件;
5.2如果为空,直接返回。如果有值,将获取到的class文件放入到List数组中进行后续处理。
5.3解析注解。注解的定义未来可能进行扩展,在解析的时候,采用责任链的设计模式,以插件式开发解析注解。为了方便用户输入,用户没有输入情况下采用默认的实现方式。
解析JPA注解及自定义注解,将解析的结果写入到领域模型WebModelVO的类结构如图4所示,WebModelVo对应1个主表模型TableVoDomain。1个TableVoDomain有0~n个子表模型(其中n>=0),有0~m个字段(其中m>0)。
5.4调用远程服务:将解析后的结果组成对象,进行序列化之后,调用代码生成器的服务引擎。
5.5具体的代码参考如下:
所述代码生成服务器用于:
模板的设计包括:
服务端的模板设计:服务端采用SpringBoot+MybatisPlus的通用方式进行设计;代码结构为Controller,Entity,Mapper,Service 4个层;
采用Freemaker模板,设计前端Vue的模板代码结构,同时设计服务端的的代码结构,同时将变化的部分作为Map的参数;
Freemaker模板生成的时候,一般将变化的部分采用集合Map对象进行保存。固定的部分采用Freemaker的语法。
在程序生成的时候,将变化的部分采用实际的数据进行替换,然后合并到Freemaker的语法中。
代码生成服务器采用基于SpringBoot的结构体系,接受客户端的Web请求,将接受到的数据,解析为WebVo类,将WebVO类转换为集合Map对象;将Map对象中的变化部分与Freemaker模板结合,生成前后端代码;
将生成的前后端代码分发到部署***中;
所述部署后端服务模块用于部署文件服务器,接受代码生成服务器传递过来的文件,并分发到指定的代码位置,并且通过代码配置菜单和默认权限。
所述部署前端服务模块用于接受代码生成服务器传递过来的前端文件,分发到指定的前端代码位置。
实施例
本实施例中,所述***部署方案如下:
本地部署一个开发环境,打开JpaClient端。开发的时候,将实体类的代码写在指定的目录下。
代码生成服务端单独进行部署。接受客户端发生的请求。
前端服务端单独部署。
后端服务器单独部署。
在客户端,继承一个类,类中有5个属性,是在开发数据表中必备的5个字段,代码如下所示:
具体的jpa类示例代码如下:
点击运行后,客户端根据自定义的业务类自动生成数据表,并解析类上的注解形成JSON格式文件发送给代码生成服务器,代码生成器生成代码,并将所生成的代码,发送到Java部署服务器及前端Vue服务器中。
然后重新启动服务器之后,如图2所示,在部署服务器上观察到的前端界面,可以进行典型的增删改查的操作。如图3所示,
用户在编辑器中输入类、属性及对应的注解。然后执行后,立即可以获取可运行的Web***。可大幅度提高开发效率。
具体实现中,本申请提供计算机存储介质以及对应的数据处理单元,其中,该计算机存储介质能够存储计算机程序,所述计算机程序通过数据处理单元执行时可运行本发明提供的一种基于JPA的Web代码自动生成***的发明内容以及各实施例中的部分或全部步骤。所述的存储介质可为磁碟、光盘、只读存储记忆体(read-only memory,ROM)或随机存储记忆体(random access memory,RAM)等。
本领域的技术人员可以清楚地了解到本发明实施例中的技术方案可借助计算机程序以及其对应的通用硬件平台的方式来实现。基于这样的理解,本发明实施例中的技术方案本质上或者说对现有技术做出贡献的部分可以以计算机程序即软件产品的形式体现出来,该计算机程序软件产品可以存储在存储介质中,包括若干指令用以使得一台包含数据处理单元的设备(可以是个人计算机,服务器,单片机。MUU或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。
本发明提供了一种基于JPA的Web代码自动生成***,具体实现该技术方案的方法和途径很多,以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。本实施例中未明确的各组成部分均可用现有技术加以实现。
Claims (7)
1.一种基于JPA的Web代码自动生成***,其特征在于,包括客户端、代码生成服务器、部署后端服务模块、部署前端服务模块;
所述客户端用于:利用JPA的注解实现数据库表的自动生成;自定义用户注解实现模板生成所需要的各变量的输入;将用户定义在类中的属性及注解组合成JSON格式,发给代码生成服务器,由代码生成服务器解析JSON之后,结合代码模板生成全套代码;
所述代码生成服务器用于:采用Freemaker模板设计前、后端模板代码,并根据客户端传递的参数,与模板合并生成全套代码;
所述部署后端服务模块用于部署应用***,接受代码生成服务器传递过来的根据模板及参数合并生成的文件,并分发到指定的代码位置,并且配置菜单和权限;
所述部署前端服务模块用于接受代码生成服务器传递过来的前端文件,分发到指定的前端代码位置。
2.根据权利要求1所述的***,其特征在于,所述客户端启动的时候,自动扫描指定目录下的带有用户注解的类;用户在使用客户端时,在编辑器环境中,新建一个类,新建的类中增加自定义的各种属性;
注解包括JPA自带的注解和用户自定义注解。
3.根据权利要求2所述的***,其特征在于,所述JPA自带的注解包括JPA框架中类上的注解和JPA框架中属性上的注解;
所述JPA框架中类上的注解,具体包括:
@Entity:用于JPA实体与表的对应关系建立;是Java Persistence API中定义的一种注解;
@Table:如果用户需要单独定义数据库中生成的表名,注解@Table能够覆盖@Entity默认的表名;该注解@Table指定了Entity所要映射的数据库表,其中@Table.name()用来指定映射表的表名;
所述JPA框架中属性上的注解,具体包括:
@ID:用于指定属性映射为数据库主键;
@Column:用于指定属性对应的数据库字段定义的时候类型。
4.根据权利要求3所述的***,其特征在于,用户自定义注解包括类上的注解和属性上的注解;
所述类上的注解,具体包括:
@WVo注解:用于指定代码生成的目标位置,包名,模板类型;
@TVo注解:用于确定表的描述,是否是树结构;
所述属性上的注解,具体包括:
@PageVo:用于指定页面生成的时候字段在页面中表现的属性;
@ValidateTo:用于指定在页面生成的时候验证的条件。
5.根据权利要求4所述的***,其特征在于,所述客户端通过责任链模式,解析各种注解后,将解析后的结果组成对象,进行序列化,发送到代码生成服务端,然后启动类继承SpringBoot容器中的ApplicationRunner,在SpringBoot容器启动的时候,执行客户端的数据库表自动生成,并扫描自定的目录,采用反射方式进行注解解析,并将生成的JSON格式的文件通过调用远程服务的方式发送到代码生成服务端。
6.根据权利要求5所述的***,其特征在于,后端模板代码是基于SpringBoot+Mybatis的框架多层结构代码;前端模板代码是基于Vue2.0框架代码;
后端SpringBoot多层结构代码程序变化的参数包括:是否主键、包名、实体名称、表名、表注释、字段名称、字段注释;
前端Vue页面变化的参数包括:字段在页面表现对应的类型、页面控件类型;
将前端、后端变化的参数部分定义为JSON数据格式。
7.根据权利要求6所述的***,其特征在于,代码生成服务端接受客户端生成的JSON文件,进行反序列化,将JSON的数据转换为Map的key、Value数据,Map数据与Freemaker的模板结合,利用Freemaker的模板引擎将Map集合中的部分替换掉Freemaker模板中变化点,生成前后端代码;同时将生成的前后端代码,分发到部署***中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210915663.0A CN115437616A (zh) | 2022-08-01 | 2022-08-01 | 一种基于JPA的Web代码自动生成*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210915663.0A CN115437616A (zh) | 2022-08-01 | 2022-08-01 | 一种基于JPA的Web代码自动生成*** |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115437616A true CN115437616A (zh) | 2022-12-06 |
Family
ID=84242725
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210915663.0A Pending CN115437616A (zh) | 2022-08-01 | 2022-08-01 | 一种基于JPA的Web代码自动生成*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115437616A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116931898A (zh) * | 2023-09-18 | 2023-10-24 | 北京冠群信息技术股份有限公司 | 一种前后端项目代码自动生成方法及*** |
-
2022
- 2022-08-01 CN CN202210915663.0A patent/CN115437616A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116931898A (zh) * | 2023-09-18 | 2023-10-24 | 北京冠群信息技术股份有限公司 | 一种前后端项目代码自动生成方法及*** |
CN116931898B (zh) * | 2023-09-18 | 2023-12-12 | 北京冠群信息技术股份有限公司 | 一种前后端项目代码自动生成方法及*** |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5966533A (en) | Method and system for dynamically synthesizing a computer program by differentially resolving atoms based on user context data | |
JP5302374B2 (ja) | アクション可能な電子メールドキュメント | |
US7970944B2 (en) | System and method for platform and language-independent development and delivery of page-based content | |
CN100527121C (zh) | 用于导入和导出分层结构化数据的方法 | |
US8438190B2 (en) | Generating web services from business intelligence queries | |
US7103627B2 (en) | Web-based system and method | |
US7080361B2 (en) | Process for generating enterprise java bean components from an SQL database | |
CN1829987B (zh) | 用于标签***的词语数据库扩展 | |
US7089533B2 (en) | Method and system for mapping between markup language document and an object model | |
US20050193331A1 (en) | System and method for generating optimized binary representation of an object tree | |
US20030018661A1 (en) | XML smart mapping system and method | |
US20090018822A1 (en) | Methods and apparatus for business rules authoring and operation employing a customizable vocabulary | |
US20040128300A1 (en) | Method and apparatus for providing a graphical user interface for creating and editing a mapping of a first structural description to a second structural description | |
CN108762743B (zh) | 一种数据表操作代码生成方法及装置 | |
US20030009323A1 (en) | Application platform for developing mono-lingual and multi-lingual systems and generating user presentations | |
EP2041672A1 (en) | Methods and apparatus for reusing data access and presentation elements | |
CN112287013B (zh) | 数据转换方法及适配器 | |
CN111666072A (zh) | 一种软件代码及文档机器人方法 | |
US8091069B2 (en) | Module specification language and meta-module | |
CN115437616A (zh) | 一种基于JPA的Web代码自动生成*** | |
CN114168109A (zh) | 一种数据处理方法、装置、电子设备和存储介质 | |
US7657869B2 (en) | Integration of external tools into an existing design environment | |
KR100420103B1 (ko) | 엑스엠엘 기반의 웹 어플리케이션 구현 시스템 및 방법 | |
Klein | Professional LinQ | |
Sgouros | OPeNDAP user guide, version 1.14 |
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 |