CN109359112A - 一种代码的自动生成方法及代码生成器 - Google Patents
一种代码的自动生成方法及代码生成器 Download PDFInfo
- Publication number
- CN109359112A CN109359112A CN201811196335.XA CN201811196335A CN109359112A CN 109359112 A CN109359112 A CN 109359112A CN 201811196335 A CN201811196335 A CN 201811196335A CN 109359112 A CN109359112 A CN 109359112A
- Authority
- CN
- China
- Prior art keywords
- data
- tables
- information
- 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
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
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供了一种代码的自动生成方法及代码生成器,所述方法及代码生成器可通过解析预定数据库中数据表的表结构,将解析所得的表结构信息组织成预定数据结构形式的相应数据结构,并基于预定的编码式渲染模板对所述数据结构中的表结构信息进行渲染处理,来生成对应于所述数据表的业务逻辑代码。由此可见,本申请实现了对增删查改等业务逻辑代码的自动生成,可有效克服现有技术中人工产出业务逻辑代码的方式所存在的各种问题,解放了生产力,提高了代码生产效率、并降低了出错率。
Description
技术领域
本发明属于软件开发技术领域,尤其涉及一种代码的自动生成方法及代码生成器。
背景技术
在进行新业务系统设计时,一般来说,需首先创建一系列的数据库表,以支持所需业务数据的组织与存储,在此基础上,还需要由技术人员进行增删查改等业务逻辑的代码开发,以确保所设计的新业务系统的可用性。
目前,业务人员在进行增删查改等业务逻辑的代码开发时,通常采用人工方式实现数据访问层、业务层到控制器层的代码生产,具体地,在创建数据库表后,技术人员会开始写MyBatis(一种半自动化关系映射框架)的xml(Extensible Markup Language,可扩展标记语言)配置文件,利用开源的MyBatis-Generator(生成器)基于所写的xml配置文件生成数据访问层的接口代码,并进行业务层接口、控制器层接口的代码编写,最终实现数据访问层、业务层到控制器层的增删查改等业务逻辑的代码开发。
然而,从数据访问层、业务层到控制器层的代码量是非常多的,现有技术的上述方式所需的人工工作量大,效率低,且在写xml配置文件时非常容易出错,因此,本领域亟需提供一种能够自动生成增删查改等业务逻辑代码的实现方案。
发明内容
有鉴于此,本发明的目的在于提供一种代码的自动生成方法及代码生成器,旨在实现对增删查改等业务逻辑代码的自动生成,以提高代码生产效率、降低出错率。
为此,本发明公开如下技术方案:
一种代码的自动生成方法,包括:
解析预定数据库中数据表的表结构,得到所述数据表的表结构信息;
将所述表结构信息组织成预定数据结构形式的相应数据结构;
基于预定的编码式渲染模板对所述数据结构中的表结构信息进行渲染处理,生成对应于所述数据表的业务逻辑代码;所述编码式渲染模板包括预定业务逻辑的代码模板。
上述方法,优选的,所述解析预定数据库中数据表的表结构,得到所述数据表的表结构信息,包括:
解析并提取预定数据库中数据表的元数据信息;
相对应地,所述将所述表结构信息组织成预定数据结构形式的相应数据结构,包括:
将所述数据表的元数据信息组织成结构体。
上述方法,优选的,所述预定数据库为当前MySQL实例,所述解析并提取预定数据库中数据表的元数据信息,包括:
与所述当前MySQL实例建立连接;
基于当前MySQL实例的元数据信息库中所提供的schema表、TABLES表及COLUMNS表提取数据表的元数据信息;其中,所述schema表能够提供当前MySQL实例中所有数据库的数据库信息;所述TABLES表能够提供当前MySQL实例中某个数据库中数据表的信息;所述COLUMNS表关联了当前MySQL实例中所有数据表和其中字段的相关信息;
所提取的数据表的元数据信息包括数据表的所有字段的相关信息及主键;
相对应地,所述将所述数据表的元数据信息组织成结构体,包括:
将数据表的所有字段的相关信息及主键组织成结构体。
上述方法,优选的,所述基于预定的编码式渲染模板对所述数据结构中的表结构信息进行渲染处理,生成对应于所述数据表的业务逻辑代码,包括:
利用Velocity模板引擎,并基于Velocity模板引擎所提供的数据访问层、业务层及控制器层的渲染模板对所述结构体中的元数据信息进行渲染处理,以生成对应于所述数据表的数据访问层、业务层到控制器层的业务逻辑代码;
所述业务逻辑代码包括增删查改业务逻辑代码。
上述方法,优选的,所述方法还包括:
若业务存在并发控制需求,则基于对悲观锁的支持,生成具有并发控制功能代码的业务逻辑代码。
一种代码生成器,包括:
表结构解析单元,用于解析预定数据库中数据表的表结构,得到所述数据表的表结构信息;
数据结构组织单元,用于将所述表结构信息组织成预定数据结构形式的相应数据结构;
模板渲染单元,用于基于预定的编码式渲染模板对所述数据结构中的表结构信息进行渲染处理,生成对应于所述数据表的业务逻辑代码;所述编码式渲染模板包括预定业务逻辑的代码模板。
上述代码生成器,优选的,所述表结构解析单元,具体用于:解析并提取预定数据库中数据表的元数据信息;
相对应地,所述数据结构组织单元,具体用于:
将所述数据表的元数据信息组织成结构体。
上述代码生成器,优选的,8、根据权利要求7所述的代码生成器,其特征在于,所述预定数据库为当前MySQL实例,所述表结构解析单元解析并提取预定数据库中数据表的元数据信息,具体包括:
与所述当前MySQL实例建立连接;
基于当前MySQL实例的元数据信息库中所提供的schema表、TABLES表及COLUMNS表提取数据表的元数据信息;其中,所述schema表能够提供当前MySQL实例中所有数据库的数据库信息;所述TABLES表能够提供当前MySQL实例中某个数据库中数据表的信息;所述COLUMNS表关联了当前MySQL实例中所有数据表和其中字段的相关信息;
所提取的数据表的元数据信息包括数据表的所有字段的相关信息及主键;
相对应地,所述数据结构组织单元将所述数据表的元数据信息组织成结构体,具体包括:
将数据表的所有字段的相关信息及主键组织成结构体。
上述代码生成器,优选的,所述模板渲染单元,具体用于:
利用Velocity模板引擎,并基于Velocity模板引擎所提供的数据访问层、业务层及控制器层的渲染模板对所述结构体中的元数据信息进行渲染处理,以生成对应于所述数据表的数据访问层、业务层到控制器层的业务逻辑代码;
所述业务逻辑代码包括增删查改业务逻辑代码。
上述代码生成器,优选的,所述模板渲染单元,还用于:
若业务存在并发控制需求,则基于对悲观锁的支持,生成具有并发控制功能代码的业务逻辑代码。
根据以上方案可知,本申请提供的代码自动生成方法及代码生成器,可通过解析预定数据库中数据表的表结构,将解析所得的表结构信息组织成预定数据结构形式的相应数据结构,并基于预定的编码式渲染模板对所述数据结构中的表结构信息进行渲染处理,来生成对应于所述数据表的业务逻辑代码。由此可见,本申请实现了对增删查改等业务逻辑代码的自动生成,可有效克服现有技术中人工产出业务逻辑代码的方式所存在的各种问题,解放了生产力,提高了代码生产效率、并降低了出错率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1是本申请实施例一提供的一种代码的自动生成方法的流程示意图;
图2是本申请实施例二提供的另一种代码的自动生成方法的流程示意图;
图3是本申请实施例三提供的代码生成器的结构示意图;
图4是本申请实施例三提供的利用代码生成器自动生成业务逻辑代码的原理示意图。
具体实施方式
为了引用和清楚起见,下文中使用的技术名词、简写或缩写总结解释如下:
MyBatis:(一种半自动化对象映射框架)能够通过MySQL(关系型数据库)中的information_schema(MySQL用来存放全局表信息、度量信息等的库)获取表的字段等信息,最后通过这些信息生成代码。
jdbc:Java DataBase Connectivity,java数据库连接,是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。
Velocity:Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅使用简单的模板语言(template language)来引用由java代码定义的对象。
悲观锁:正如其名,具有强烈的独占和排他特性。它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状态。悲观锁的实现,往往依靠数据库提供的锁机制(也只有数据库层提供的锁机制才能真正保证数据访问的排他性,,否则,即使在本系统中实现了加锁机制,也无法保证外部系统不会修改数据)。
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
现有技术中,业务人员在进行业务逻辑的代码开发时,通常采用人工方式实现数据访问层、业务层到控制器层的代码生产,从数据访问层、业务层到控制器层的代码量是非常多的,且在写xml配置文件时非常容易出错。针对这一现象,发明人经研究发现,对于一些简单的业务逻辑,如增删查改等,其业务逻辑代码其实是相当雷同的,唯一不同的仅是底层的数据库表结构,鉴于此,发明人提出了一种通过解析MySQL等数据库表的表结构、将解析所得的表结构信息生成对应的数据结构,并进而通过模板引擎和自动化的脚本来自动生成从数据访问层到控制器层的所有业务逻辑代码的方案,以克服现有技术中人工产出业务逻辑代码的方式所存在的各种问题,解放生产力、提高代码生产效率、并降低出错率。
以下将通过具体实施例对本申请的方案内容进行详细说明。
实施例一
本申请实施例一提供一种代码的自动生成方法,参考图1示出的代码的自动生成方法的流程示意图,该方法可以包括以下步骤:
步骤101、解析预定数据库中数据表的表结构,得到所述数据表的表结构信息。
所述预定数据库,可以是但不限于关系型数据库MySQL的当前MySQL实例,本实施例中将主要以所述预定数据库为当前MySQL实例为例对本申请的方案内容进行阐述。
在进行新业务系统设计时,一般来说,需首先创建一系列的数据库表,以支持所需业务数据的组织与存储,在此基础上,还需要由技术人员进行增删查改等业务逻辑的代码开发,以确保所设计的新业务系统的可用性。
鉴于此,本实施例中,所述预定数据库中的数据表,即可以是在进行新业务系统设计时所创建的数据库表,在所述预定数据库为关系型数据库MySQL的当前MySQL实例的情况下,所述预定数据库中的数据表则相对应地为当前MySQL实例中的数据表。
本实施例具体通过解析并提取所述预定数据库中数据表的元数据信息,来实现对该预定数据库中数据表的表结构进行解析。
其中,MySQL会提供一个记录了所有元数据信息的元数据信息库information_schema,该元数据信息库information_schema主要包括:
1)schema表:
用于提供当前MySQL实例中所有数据库的数据库信息,可以包括但不限于当前MySQL实例中包括哪些数据库、每个数据库的名称、编码类型等信息;
2)TABLES表:
提供当前MySQL实例中某个数据库中数据表的信息,可以包括但不限于某个数据库下具体有哪些表,每个表使用的存储引擎、所采用的编码格式以及相关注释信息等等;
3)COLUMNS表:
用于关联当前MySQL实例中所有数据表和其中字段(字段即指数据表中的列)的相关信息,可以包括但不限于字段的类型、名称、编码等信息。
在提取当前MySQL实例中数据表的元数据信息时,具体可通过与所述当前MySQL实例建立连接,并利用所建立的连接基于MySQL的元数据信息库information_schema中所提供的schema表、TABLES表及COLUMNS表来进行数据表的元数据信息的提取。
其中,jdbc(Java DataBase Connectivity,java数据库连接)提供了非常方便的工具来帮助我们获取这些元数据信息,鉴于此,具体实施中,可以借助jdbc所提供的工具进行数据表元数据信息的提取,示例性地,提取元数据信息的代码可以为:
Connection connection=getConnection();//获取数据库连接
DatabaseMetaData metaData=connection.getMetaData();//获取元数据
所提取的数据表的元数据信息可以包括但不限于数据表的所有字段的相关信息及主键。
具体地,在制定了sechema和TABLES后,可通过metaData.getColumns(提取COLUMNS表信息)方法来获取一张数据表中的所有字段及其相关信息。例如可以提取数据表中所有字段的类型、名称、编码等信息。
相类似地,可通过getPrimaryKeys来获取或计算数据表的主键,数据表的主键可能是独立主键,也可能是联合主键,一般情况下,数据表的主键就是由一个字段所构成的独立主键,如id(Identity,身份标识号)等,某些情况下,主键还可以由多个字段组成,比如由id、name组成等,这样情况下,getPrimaryKeys返回的就是由id、name这两个字段所组成的联合主键。
步骤102、将所述表结构信息组织成预定数据结构形式的相应数据结构。
在对数据表的表结构进行解析的基础上,本申请继续将解析所得的表结构信息组织成预定数据结构形式的相应数据结构。
具体地,本申请将所提取出的数据表的所有字段的类型、名称、编码以及表的主键等元数据信息组织成一结构体,将数据表的元数据信息组织成结构体可便于元数据信息的扩展,同时也为后续在基于模板渲染进行业务代码的自动生成时为模板引擎与元数据信息间的对接提供了便利。
其中,本申请提供了以下的Table表Java结构体示例:
public class IntrospectedTable{
protected List<IntrospectedColumn>primaryKeyColumns;//主键列
protected List<IntrospectedColumn>baseColumns;//基础列
protected List<IntrospectedColumn>blobColumns;//类型为blob(binarylarge object),二进制大对象)的列
protected String introspectedSchema;
private String introspectedCatalog;
private String introspectedTableName;
}
上述结构体仅是本实施例为描述方案内容所提供的示例性说明,具体实施中,可根据实际需求进行结构体设计,不必以本实施例提供的上述结构体为限。
步骤103、基于预定的编码式渲染模板对所述数据结构中的表结构信息进行渲染处理,生成对应于所述数据表的业务逻辑代码;所述编码式渲染模板包括预定业务逻辑的代码模板。
在将所提取的数据表的元数据信息组织成结构体后,本申请基于预定的编码式渲染模板对所述结构体中的表结构信息进行渲染处理,以此生成对应于所述数据表的业务逻辑代码。
具体地,可利用Velocity模板引擎,并基于Velocity模板引擎所提供的数据访问层、业务层及控制器层的渲染模板(一些自动化的脚本)对所述结构体中的元数据信息进行渲染处理,以此生成对应于所述数据表的数据访问层、业务层到控制器层的业务逻辑代码。
以数据访问层的Velocity模板为例,Velocity可提供如下的数据访问层Velocity模板:
public${name}get${name}(${primaryType}${primaryKey}){
return mapper.selectByPrimaryKey(${primaryKey});
}
其中,在进行渲染时,${}之外的字符串(对应于结构体中不同数据表较为通用的元数据信息)保持不变,而${}内的字符串是变量,通过外部注入将字符串(对应于结构体中不同数据表的较为专用的元数据信息)动态填充至${}内的相应位置,渲染就是将动态部分填充至${}内的相应位置的过程。
较为典型地,如上文所述,对于简单的增删查改等业务逻辑,其业务逻辑代码其实是相当雷同的,唯一不同仅是底层的数据库表结构,从而可以利用本申请的方案来进行增删查改等简单业务逻辑的代码的自动生成。
与现有技术中开源的MyBatis-Generator只提供了对数据访问层的代码的自动生成(需由技术人员在写xml配置文件的基础上,基于所写的xml配置文件进行数据访问层的业务逻辑代码的自动生成)相比,本申请方案可提供从数据访问层、业务层到控制器层所有代码的自动生成,解放了生产力,提高了代码生产效率、并降低了出错率。
实施例二
在接下来的实施例二中继续对前述实施例中的代码自动生成方法进行进一步说明,参考图2示出的代码自动生成方法的流程示意图,在本实施例中,所述代码的自动生成方法还可以包括如下步骤:
步骤104、若业务存在并发控制需求,则基于对悲观锁的支持,生成具有并发控制功能代码的业务逻辑代码。
在利用本申请方案时,除了上文所述的增删查改等简单的业务逻辑,还可以使用灵活的Velocity模板,将业务抽象出其他更复杂的通用逻辑,如并发控制逻辑等,当业务抽象出其他更复杂的通用逻辑后,可以将对应的业务逻辑生成模板,并加入到引擎中,以此扩展引擎的复用能力。
以所抽象出的其他通用逻辑为并发控制逻辑为例,具体可通过在引擎中提供对悲观锁的支持(MySQL数据库自身已提供有对悲观锁机制的支持,但现有的开源方案不支持悲观锁的SQL语句,本申请在开源方案的基础上,增加了对悲观锁的SQL语句的支持),并加入并发控制逻辑模板,使得在业务有对并发控制的需求时,可以利用引擎中所加入的并发控制逻辑模板基于对悲观锁的支持,一键生成具有并发控制功能的业务逻辑代码,例如一键生成具有并发控制功能的增删查改逻辑代码等。
基于本实施例方案,可在业务抽象出其他更复杂的通用逻辑后,通过将对应的业务逻辑生成模板并加入到引擎中,来实现扩展引擎的复用能力。
实施例三
对应于上述的代码的自动生成方法,本申请还提供了一种代码生成器,参考图3提供的代码生成器的结构示意图,本实施例中,所述代码生成器包括:
表结构解析单元301,用于解析预定数据库中数据表的表结构,得到所述数据表的表结构信息302;
数据结构组织单元303,用于将所述表结构信息组织成预定数据结构形式的相应数据结构;
模板渲染单元,用于基于预定的编码式渲染模板对所述数据结构中的表结构信息进行渲染处理,生成对应于所述数据表的业务逻辑代码;所述编码式渲染模板包括预定业务逻辑的代码模板。
在本申请实施例的一实施方式中,所述表结构解析单元301,具体用于:解析并提取预定数据库中数据表的元数据信息;相对应地,所述数据结构组织单元302,具体用于:将所述数据表的元数据信息组织成结构体。
在本申请实施例的一实施方式中,所述预定数据库为当前MySQL实例,所述表结构解析单元301解析并提取预定数据库中数据表的元数据信息,具体包括:与所述当前MySQL实例建立连接;基于当前MySQL实例的元数据信息库中所提供的schema表、TABLES表及COLUMNS表提取数据表的元数据信息;其中,所述schema表能够提供当前MySQL实例中所有数据库的数据库信息;所述TABLES表能够提供当前MySQL实例中某个数据库中数据表的信息;所述COLUMNS表关联了当前MySQL实例中所有数据表和其中字段的相关信息;
所提取的数据表的元数据信息包括数据表的所有字段的相关信息及主键;相对应地,所述数据结构组织单元302将所述数据表的元数据信息组织成结构体,具体包括:将数据表的所有字段的相关信息及主键组织成结构体。
在本申请实施例的一实施方式中,所述模板渲染单元303,具体用于:利用Velocity模板引擎,并基于Velocity模板引擎所提供的数据访问层、业务层及控制器层的渲染模板对所述结构体中的元数据信息进行渲染处理,以生成对应于所述数据表的数据访问层、业务层到控制器层的业务逻辑代码;
所述业务逻辑代码包括增删查改业务逻辑代码。
在本申请实施例的一实施方式中,所述模板渲染单元303,还可以用于:若业务存在并发控制需求,则基于对悲观锁的支持,生成具有并发控制功能代码的业务逻辑代码。
基于本实施例的代码生成器,参考图4示出的自动生成业务逻辑代码的原理示意图,具体可基于如4所示的业务逻辑代码自动生成原理、利用本实施例的代码生成器进行增删查改等业务逻辑代码的自动生成。
对于本发明实施例三公开的代码生成器而言,由于其与实施例一至实施例二公开的代码的自动生成方法相对应,所以描述的比较简单,相关相似之处请参见实施例一至实施例二中代码的自动生成方法部分的说明即可,此处不再详述。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
为了描述的方便,描述以上系统或装置时以功能分为各种模块或单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。
最后,还需要说明的是,在本文中,诸如第一、第二、第三和第四等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (10)
1.一种代码的自动生成方法,其特征在于,包括:
解析预定数据库中数据表的表结构,得到所述数据表的表结构信息;
将所述表结构信息组织成预定数据结构形式的相应数据结构;
基于预定的编码式渲染模板对所述数据结构中的表结构信息进行渲染处理,生成对应于所述数据表的业务逻辑代码;所述编码式渲染模板包括预定业务逻辑的代码模板。
2.根据权利要求1所述的方法,其特征在于,所述解析预定数据库中数据表的表结构,得到所述数据表的表结构信息,包括:
解析并提取预定数据库中数据表的元数据信息;
相对应地,所述将所述表结构信息组织成预定数据结构形式的相应数据结构,包括:
将所述数据表的元数据信息组织成结构体。
3.根据权利要求2所述的方法,其特征在于,所述预定数据库为当前MySQL实例,所述解析并提取预定数据库中数据表的元数据信息,包括:
与所述当前MySQL实例建立连接;
基于当前MySQL实例的元数据信息库中所提供的schema表、TABLES表及COLUMNS表提取数据表的元数据信息;其中,所述schema表能够提供当前MySQL实例中所有数据库的数据库信息;所述TABLES表能够提供当前MySQL实例中某个数据库中数据表的信息;所述COLUMNS表关联了当前MySQL实例中所有数据表和其中字段的相关信息;
所提取的数据表的元数据信息包括数据表的所有字段的相关信息及主键;
相对应地,所述将所述数据表的元数据信息组织成结构体,包括:
将数据表的所有字段的相关信息及主键组织成结构体。
4.根据权利要求2-3任一项所述的方法,其特征在于,所述基于预定的编码式渲染模板对所述数据结构中的表结构信息进行渲染处理,生成对应于所述数据表的业务逻辑代码,包括:
利用Velocity模板引擎,并基于Velocity模板引擎所提供的数据访问层、业务层及控制器层的渲染模板对所述结构体中的元数据信息进行渲染处理,以生成对应于所述数据表的数据访问层、业务层到控制器层的业务逻辑代码;
所述业务逻辑代码包括增删查改业务逻辑代码。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
若业务存在并发控制需求,则基于对悲观锁的支持,生成具有并发控制功能的业务逻辑代码。
6.一种代码生成器,其特征在于,包括:
表结构解析单元,用于解析预定数据库中数据表的表结构,得到所述数据表的表结构信息;
数据结构组织单元,用于将所述表结构信息组织成预定数据结构形式的相应数据结构;
模板渲染单元,用于基于预定的编码式渲染模板对所述数据结构中的表结构信息进行渲染处理,生成对应于所述数据表的业务逻辑代码;所述编码式渲染模板包括预定业务逻辑的代码模板。
7.根据权利要求6所述的代码生成器,其特征在于,所述表结构解析单元,具体用于:解析并提取预定数据库中数据表的元数据信息;
相对应地,所述数据结构组织单元,具体用于:
将所述数据表的元数据信息组织成结构体。
8.根据权利要求7所述的代码生成器,其特征在于,所述预定数据库为当前MySQL实例,所述表结构解析单元解析并提取预定数据库中数据表的元数据信息,具体包括:
与所述当前MySQL实例建立连接;
基于当前MySQL实例的元数据信息库中所提供的schema表、TABLES表及COLUMNS表提取数据表的元数据信息;其中,所述schema表能够提供当前MySQL实例中所有数据库的数据库信息;所述TABLES表能够提供当前MySQL实例中某个数据库中数据表的信息;所述COLUMNS表关联了当前MySQL实例中所有数据表和其中字段的相关信息;
所提取的数据表的元数据信息包括数据表的所有字段的相关信息及主键;
相对应地,所述数据结构组织单元将所述数据表的元数据信息组织成结构体,具体包括:
将数据表的所有字段的相关信息及主键组织成结构体。
9.根据权利要求7-8任一项所述的代码生成器,其特征在于,所述模板渲染单元,具体用于:
利用Velocity模板引擎,并基于Velocity模板引擎所提供的数据访问层、业务层及控制器层的渲染模板对所述结构体中的元数据信息进行渲染处理,以生成对应于所述数据表的数据访问层、业务层到控制器层的业务逻辑代码;
所述业务逻辑代码包括增删查改业务逻辑代码。
10.根据权利要求6所述的代码生成器,其特征在于,所述模板渲染单元,还用于:
若业务存在并发控制需求,则基于对悲观锁的支持,生成具有并发控制功能代码的业务逻辑代码。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811196335.XA CN109359112A (zh) | 2018-10-15 | 2018-10-15 | 一种代码的自动生成方法及代码生成器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811196335.XA CN109359112A (zh) | 2018-10-15 | 2018-10-15 | 一种代码的自动生成方法及代码生成器 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109359112A true CN109359112A (zh) | 2019-02-19 |
Family
ID=65349341
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811196335.XA Pending CN109359112A (zh) | 2018-10-15 | 2018-10-15 | 一种代码的自动生成方法及代码生成器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109359112A (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110032369A (zh) * | 2019-04-24 | 2019-07-19 | 成都市映潮科技股份有限公司 | 一种代码自动生成方法、装置及介质 |
CN110989999A (zh) * | 2019-12-03 | 2020-04-10 | 望海康信(北京)科技股份公司 | 代码生成方法、装置、电子设备及介质 |
CN111190587A (zh) * | 2019-12-26 | 2020-05-22 | 曙光信息产业(北京)有限公司 | 一种基于jdbc自动生成工程化前端代码的方法及系统 |
CN111522881A (zh) * | 2020-04-26 | 2020-08-11 | 北京三快在线科技有限公司 | 业务数据处理方法、装置、服务器及存储介质 |
CN111538884A (zh) * | 2020-04-20 | 2020-08-14 | 上海鸿翼软件技术股份有限公司 | 一种数据搜索方法、装置、设备及计算机可读存储介质 |
CN111694562A (zh) * | 2020-06-16 | 2020-09-22 | 北京弘远博学科技有限公司 | 代码生成工具 |
CN112015429A (zh) * | 2020-08-21 | 2020-12-01 | 杭州指令集智能科技有限公司 | 一种代码生成方法、装置及设备 |
CN112463135A (zh) * | 2020-12-11 | 2021-03-09 | 中国人寿保险股份有限公司 | 代码生成方法、代码生成器、电子设备及存储介质 |
CN112711405A (zh) * | 2020-12-28 | 2021-04-27 | 山东浪潮通软信息科技有限公司 | 一种生成增删改查应用程序接口的方法、设备及存储介质 |
CN114115839A (zh) * | 2022-01-28 | 2022-03-01 | 云账户技术(天津)有限公司 | Orm代码处理方法、装置、电子设备以及可读存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102629204A (zh) * | 2012-03-09 | 2012-08-08 | 中国联合网络通信集团有限公司 | 网页源代码生成方法及装置 |
CN103135976A (zh) * | 2011-11-30 | 2013-06-05 | 阿里巴巴集团控股有限公司 | 代码自动生成方法及装置 |
-
2018
- 2018-10-15 CN CN201811196335.XA patent/CN109359112A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103135976A (zh) * | 2011-11-30 | 2013-06-05 | 阿里巴巴集团控股有限公司 | 代码自动生成方法及装置 |
CN102629204A (zh) * | 2012-03-09 | 2012-08-08 | 中国联合网络通信集团有限公司 | 网页源代码生成方法及装置 |
Non-Patent Citations (2)
Title |
---|
无毁的湖光: ""MySql之自动生成CRUD代码"", 《HTTPS://YQ.ALIYUN.COM/ARTICLES/627749》 * |
无毁的湖光-AL: ""MySql之自动生成CRUD代码"", 《HTTPS://MY.OSCHINA.NET/ALCHEMYSTAR/BLOG/853550?SPM=A2C4E.11153940.BLOGCONT627749.13.6269739DNGMDWG》 * |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110032369A (zh) * | 2019-04-24 | 2019-07-19 | 成都市映潮科技股份有限公司 | 一种代码自动生成方法、装置及介质 |
CN110989999A (zh) * | 2019-12-03 | 2020-04-10 | 望海康信(北京)科技股份公司 | 代码生成方法、装置、电子设备及介质 |
CN111190587A (zh) * | 2019-12-26 | 2020-05-22 | 曙光信息产业(北京)有限公司 | 一种基于jdbc自动生成工程化前端代码的方法及系统 |
CN111538884A (zh) * | 2020-04-20 | 2020-08-14 | 上海鸿翼软件技术股份有限公司 | 一种数据搜索方法、装置、设备及计算机可读存储介质 |
CN111522881A (zh) * | 2020-04-26 | 2020-08-11 | 北京三快在线科技有限公司 | 业务数据处理方法、装置、服务器及存储介质 |
CN111522881B (zh) * | 2020-04-26 | 2023-04-28 | 北京三快在线科技有限公司 | 业务数据处理方法、装置、服务器及存储介质 |
CN111694562A (zh) * | 2020-06-16 | 2020-09-22 | 北京弘远博学科技有限公司 | 代码生成工具 |
CN112015429A (zh) * | 2020-08-21 | 2020-12-01 | 杭州指令集智能科技有限公司 | 一种代码生成方法、装置及设备 |
CN112463135A (zh) * | 2020-12-11 | 2021-03-09 | 中国人寿保险股份有限公司 | 代码生成方法、代码生成器、电子设备及存储介质 |
CN112711405A (zh) * | 2020-12-28 | 2021-04-27 | 山东浪潮通软信息科技有限公司 | 一种生成增删改查应用程序接口的方法、设备及存储介质 |
CN114115839A (zh) * | 2022-01-28 | 2022-03-01 | 云账户技术(天津)有限公司 | Orm代码处理方法、装置、电子设备以及可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109359112A (zh) | 一种代码的自动生成方法及代码生成器 | |
CN113392227B (zh) | 面向轨道交通领域的元数据知识图谱引擎系统 | |
US7493335B2 (en) | Object process graph relational database interface | |
CN103853718B (zh) | 分片数据库访问方法及数据库系统 | |
US7779047B2 (en) | Pluggable merge patterns for data access services | |
CN107766402A (zh) | 一种楼盘字典云房源大数据平台 | |
Alvares et al. | Dynamic modeling of trajectory patterns using data mining and reverse engineering | |
Xia et al. | Big traffic data processing framework for intelligent monitoring and recording systems | |
CN101799835A (zh) | 一种本体驱动地理信息检索系统和检索方法 | |
CN103927385A (zh) | 数据模型的统一方法及装置 | |
CN101499063A (zh) | 基于跟踪的数据库模式演进方法及系统 | |
CN114218218A (zh) | 基于数据仓库的数据处理方法、装置、设备及存储介质 | |
CN102193958A (zh) | 基于互联网的空间决策支持系统的实现方法 | |
CN105550351B (zh) | 旅客行程数据即席查询系统及方法 | |
CN101794223B (zh) | Wade服务消息架构的设计方法 | |
Sethy et al. | Big data analysis using Hadoop: a survey | |
CN111427869A (zh) | 一种基于区块链的日志系统 | |
US7103872B2 (en) | System and method for collecting and transferring sets of related data from a mainframe to a workstation | |
CN111159427A (zh) | 一种基于众包的知识图谱构建方法及系统 | |
CN112015906B (zh) | 网络配置知识图谱的构建方案 | |
CN103955369A (zh) | 一种基于扩展uml的软件模糊自适应建模工具构造方法 | |
CN106682230A (zh) | 基于html5和css3移动展示技术架构的信息服务平台 | |
CN103198140B (zh) | 一种数据库存储系统及数据存储方法 | |
CN107562909A (zh) | 一种融合搜索与计算的大数据分析系统及其分析方法 | |
Middleton et al. | ECL/HPCC: A unified approach to big data |
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: 20190219 |