CN108846101A - 一种自动生成sql语句的方法和装置 - Google Patents
一种自动生成sql语句的方法和装置 Download PDFInfo
- Publication number
- CN108846101A CN108846101A CN201810631425.0A CN201810631425A CN108846101A CN 108846101 A CN108846101 A CN 108846101A CN 201810631425 A CN201810631425 A CN 201810631425A CN 108846101 A CN108846101 A CN 108846101A
- Authority
- CN
- China
- Prior art keywords
- model
- sql statement
- mark
- data
- reference format
- 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.)
- Granted
Links
Landscapes
- Stored Programmes (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明属于软件开发技术领域,公开了一种自动生成SQL语句的方法及装置,所述方法中先根据用户输入的预设编程接口指令确定与数据库中目标数据表相对应的数据模型;其中,所述数据模型中包括特定标注,所述特定标注用于确定所述数据模型与所述目标数据表的对应关系和表征生成标准格式的SQL语句的必要参数;然后调用预设编程接口将所述数据模型中的特定标记使用预设生成规则生成标准格式的SQL语句;其中,所述标准格式的SQL语句中的各个部分与所述特定标注具有对应关系。因此,本发明实施例中只需要调用预设编程接口就可以自动依据预设生成规则将特定标注生成标准格式的SQL语句,无需开发人员手动编写标准格式的SQL语句,减小编码量,提高了工作效率。
Description
技术领域
本发明涉及软件开发技术领域,尤其涉及一种自动生成SQL语句的方法和装置。
背景技术
现有的数据库应用开发中,通常采用MVC架构进行开发。其中,MVC是模型(model)、视图(view)、控制器(controller)这三个单词上的首字母组成。它是一种目前广泛流行的应用架构,它的目的是实现编程系统的职能分工。
参见图1,图1是MVC架构关系示意图。用户通过输入指令和参数与控制器交互,控制器将用户输入的指令和参数传递给数据模型,数据模型执行业务逻辑判断、数据库存取,根据业务逻辑选择不同的视图,视图将结果反馈给用户。
现有技术中,在编写模型后,数据库存取的实现需要根据用户需求编写SQL(Structured Query Language)语句,之后需要调用数据库开发接口执行SQL语句,最终将SQL语句的执行结果绑定到模型上,使得模型实现数据库存储的相关功能。
但是,此种方式需要开发人员手动编写标准格式的SQL语句,且需要运行后将结果绑定到数据模型上,步骤繁琐且开发效率较低。
发明内容
有鉴于此,本发明实施例公开了一种自动生成SQL语句的方法及装置,以实现无需绑定模型且无需人工编写SQL语句,减少操作步骤,降低开发人员代码输入量,从而提高数据库开发效率。
为了实现上述目的,本发明实施例公开的内容如下:
本发明实施例公开了一种自动生成SQL语句的方法,包括:
根据用户输入的预设编程接口指令确定与数据库中目标数据表相对应的数据模型;其中,所述数据模型中包括特定标注,所述特定标注用于确定所述数据模型与所述目标数据表的对应关系和表征生成标准格式的SQL语句的必要参数;
调用所述预设编程接口指令中所对应的预设编程接口将所述数据模型中的特定标记使用预设生成规则生成标准格式的SQL语句;其中,所述标准格式的SQL语句中的各个部分与所述特定标注具有对应关系。
优选的,还包括:
执行所述标准格式的SQL语句,得到结果集;
根据所述结果集中的各个结果绑定与各个所述结果对应的数据模型。
优选的,所述特定标注包括模型标注和/或模型属性标注;
其中,所述模型标注用于将确定所述数据库中的目标数据表,所述模型属性标注用于确定所述目标数据表中的目标数据列。
优选的,所述模型标注具体包括:
用于确定所述目标数据表的第一模型标注;
用于将所述目标数据表与其他数据表进行关联的第二模型标注;
用于表征查询参数的第三模型标注;
用于表征查询条件的第四模型标注;
用于对结果进行分组的第五模型标注;
用于表征以合计方式作为查询条件的第六模型标注;
用于使用字段排序方式对结果进行排序的第七模型标注;
用于执行联合查询的第八模型标注;
用于使用子查询的第九模型标注。
优选的,所述模型属性标注具体包括:
用于确定所述目标数据表中目标数据列的第一模型属性标注;
用于生成合计统计的第二模型属性标注。
优选的,所述预设编程接口以及所述预设生成规则预先设置在MVC架构中的标准类库中。
优选的,所述预设编程接口具体包括:
用于根据所述数据模型中的所述特定标注以及所述预设生成规则生成标准格式的SQL语句并将该标准格式的SQL语句返回的第一编程接口;
用于根据所述数据模型中的所述特定标注以及所述预设生成规则生成标准格式的SQL语句并将所述特定标注中的目标参数传入该标准格式的SQL语句中执行,并将执行的结果绑定到与该结果相对应的数据模型中并返回绑定后的数据模型的第二编程接口;
用于根据所述数据模型中的所述特定标注以及所述预设生成规则生成标准格式的SQL语句并将所述特定标注中的目标参数传入该标准格式的SQL语句中执行,并将执行的结果绑定到与该结果相对应的数据模型中并返回包括该结果的第一个模型的第三编程接口。
本发明另一方面公开了一种自动生成SQL语句的装置,包括:
数据模型确定模块,用于根据用户输入的预设编程接口指令确定与数据库中目标数据表相对应的数据模型;其中,所述数据模型中包括特定标注,所述特定标注用于确定所述数据模型与所述目标数据表的对应关系和表征生成标准格式的SQL语句的必要参数;
SQL语句生成模块,用于调用所述预设编程接口指令中所对应的预设编程接口将所述数据模型中的特定标记使用预设生成规则生成标准格式的SQL语句;其中,所述标准格式的SQL语句中的各个部分与所述特定标注具有对应关系。
优选的,还包括:
语句执行模块,用于执行所述标准格式的SQL语句,得到结果集;
结果绑定模块,用于根据所述结果集中的各个结果绑定与各个所述结果对应的数据模型。
优选的,所述特定标注包括模型标注和/或模型属性标注;
优选的,所述预设编程接口以及所述预设生成规则预先设置在MVC架构中的标准类库中。
由上述方案可以看出,本发明实施例公开了一种自动生成SQL语句的方法及装置,所述方法中先根据用户输入的预设编程接口指令确定与数据库中目标数据表相对应的数据模型;其中,所述数据模型中包括特定标注,所述特定标注用于确定所述数据模型与所述目标数据表的对应关系以及生成标准格式的SQL语句的必要参数;然后调用所述预设编程接口指令中所对应的预设编程接口将所述数据模型中的特定标记使用预设生成规则生成标准格式的SQL语句;其中,所述标准格式的SQL语句中的各个部分与所述特定标注具有对应关系。因此,本发明实施例中只需要调用预设编程接口就可以自动依据预设生成规则将特定标注生成标准格式的SQL语句,无需开发人员手动编写标准格式的SQL语句,减小编码量,大大提高了工作效率。
并且,由于所述标准格式的SQL语句中的各个部分与所述特定标注具有对应关系,因此,开发人员可以在极短时间内掌握和理解特定标注的使用方法,基本无需学习成本。且由于特定标注与标准格式的SQL语句有对应关系的存在,可以使得开发人员直接调整特定标注来实现对标准格式的SQL语句的调整和控制,便于复杂SQL语句性能的调整和优化。
另外,由于应用开发语言的代码中不再需要交织SQL语句,采用本发明实施例后,可以实现应用代码与SQL语句的分离,便于针对性的独立测试。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1是现有技术中MVC架构的结构示意图;
图2是本发明实施例公开的一种自动生成SQL语句的方法的流程示意图;
图3是本发明实施例公开的一种自动生成SQL语句的装置的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例主要应用在数据库编程技术领域,主要涉及关系型数据可以开发过程中,为开发人员降低工作量。
本发明实施例中,提供了一种在数据模型上添加特定标注的方式来实现自动生成SQL语句的方法,可以实现开发人员无需直接使用和编辑标准格式的SQL语句就可以实现数据库的开发和编程。
需要说明的是,本发明中可以应用在MVC架构中,MVC是模型(model)、视图(view)、控制器(controller)这三个单词上的首字母组成。它是一种目前广泛流行的应用架构。应当理解的是,本发明实施例中的数据模型是模型的一种,实际使用中,通常用一个普通类(Class)来实现。
需要说明的是,本发明实施例中的特定标注可以直接添加在模型或模型的属性上,目前主流的面向对象的开发语言均支持标注,添加标注不会影响现有应用代码的执行结果。
下面对本发明实施例的技术方案进行详细介绍。
参见图2,图2是本发明实施例中公开的一种自动生成SQL语句的方法的流程示意图。
本发明公开了一种自动生成SQL语句的方法,包括:
S101、根据用户输入的预设编程接口指令确定与数据库中目标数据表相对应的数据模型;其中,所述数据模型中包括特定标注,所述特定标注用于确定所述数据模型与所述目标数据表的对应关系和表征生成标准格式的SQL语句的必要参数;
本发明实施例中,预设编程接口以及预设生成规则预先设置在MVC架构中的标准类库中。
本发明实施例中,数据库是与数据模型相连接的数据库。
其中,特定标注可以包括模型标注以及模型属性标注。
其中,模型标注应用于模型,具体可以包括如下内容:
用于确定所述目标数据表的第一模型标注;
实际使用中,以.Net C#语言为例,第一模型标注使用格式为[FromTable(“表名”)]或[FromTable(“表名”,”模式名”)]。
用于将所述目标数据表与其他数据表进行关联的第二模型标注;
实际使用中,第二模型标注使用格式为[JoinTable(“表别名”,“表名”,OnRaw=”Join条件”)]或[JoinTable(“表别名”,“表名”,”模式名”,OnRaw=”Join条件”)]。
用于表征查询参数的第三模型标注;
实际使用中,第三模型标注的使用格式为[SqlParameter(“参数名”,“参数类型”)]。
用于表征查询条件的第四模型标注;
实际使用中,第四模型标注的使用格式为[SqlWhere(“查询条件”)]。
用于对结果进行分组的第五模型标注;
实际使用中,第五模型标注的使用格式为[SqlGroupBy(“数据列1,数据列2,…”)]。
用于表征以合计方式作为查询条件的第六模型标注;
实际使用中,第六模型标注的使用格式为[SqlHaving(“Having条件”)]。
用于使用字段排序方式对结果进行排序的第七模型标注;
实际使用中,第七模型标注的使用格式为[SqlOrderBy(“数据列1,数据列2,…”)]。
用于执行联合查询的第八模型标注;
实际使用中,第八模型标注的使用格式为[SqlUnion(提供union语句SQL来源的模型类型)]。
用于使用子查询的第九模型标注。实际使用中,第九模型标注的使用格式为[SubQuery(“子查询名”,提供子查询语句SQL来源的模型类型)]。
其中,其中,模型属性标注应用于模型的属性,具体可以包括如下内容
用于确定所述目标数据表中目标数据列的第一模型属性标注;
实际使用中,第一模型属性标注的使用格式包括[SqlColumn(“列名”)]或[SqlColumn(“表别名”,“列名”)]。
用于生成合计统计的第二模型属性标注。
实际使用中,第二模型属性标注的使用格式包括[SqlCompute(“别名”,“计算表达式”)]。
在确定数据模型之前,用户预先会将特定标注设置在数据模型和/或数据模型的属性上。具体设置过程可以包括如下步骤。
首先,可以定义一个数据模型与数据库的目标数据表相对应,当然,也可以使用现有技术中的现成数据模型,例如,NET语言中的plain old CLR object(POCO)数据模型或Java语言中的Plain Old Java Object(POJO)数据模型。即接收用户定义数据模型的操作,定义与数据库的目标数据表相对应的数据模型。本发明实施例中,以目标数据表为book为例,其具有三个数据列,分别为id,name,UnitPrice。
其中,如果数据模型的名字与目标数据表的名字相同,例如book模型,则该数据模型会与在数据库中查找与其名字相同的目标数据表,将其作为关联对象,使得数据模型与目标数据表自动对应。
如果不同,则需要在数据模型上添加一个特定标注,该特定标注为用于确定所述目标数据表的第一模型标注,用于使得该数据模型与目标数据表具有对应关系。此时,接收用户对数据模型添加第一模型标注的操作,使得该数据模型与数据库的目标数据表相对应。
如果数据模型的属性的名字与目标数据表的列的名字相同,则数据模型的属性会在目标数据表的数据列中查找命名相同的数据列,自动与该数据列自动对应。
如果不同,则需要在数据模型的属性中添加一个特定标注,该特定标注为用于将所述目标数据表与其他数据表进行关联的第二模型标注,使得该数据模型的属性与目标数据表的列相对应。此时,接收用户对数据模型添加第二模型标注的操作,将第二模型标注添加到数据模型的属性上,使得该数据模型的属性与目标数据表的列相对应。
然后,在数据模型中添加另一个特定标注,该特定标注为用于表征查询参数的第三模型标注。此时,接收用户添加第三模型标注的操作,将第三模型标注添加到数据模型中,用于确定查询参数的名字以及查询参数与目标数据表的数据列的对应关系。例如,P0。
之后,在数据模型上添加又一个特定标注,该特定标注为用于表征查询条件的第四模型标注,或者于表征以合计方式作为查询条件的第六模型标注,此时,接收用户添加第四模型标注的操作,使得该第四模型标注确定目标数据表的数据列以及该数据列与查询参数的关系。例如,大于。
本发明实施例中,还提供了在特定标注中引用数据模型属性的方式。本发明实施例中,用$后加上数据模型属性名称可引用模型属性,例如,$Price可引用上述实例中Book模型的Price属性,在标准格式的SQL语句生成时会自动将该引用转换成数据模型属性所映射的数据列,即目标数据表的数据列,此例为UnitPrice。
本发明实施例中,还提供了特定标注中引用其他特定标注的方式。
例如,引用第三模型标注SqlParameter,$Param(参数名)可引用“参数名”对应的SqlParameter标注。如:$Param(p0)可引用SqlParameter标注,在标准格式的SQL语句生成时会自动将该引用转换成SQL参数,$Param(p0)会生成@p0。
引用第九模型标注SubQuery,$SubQuery(子查询名)可引用“子查询名”对应的SubQuery标注,在标准格式的SQL语句生成时会自动将该引用转换成对应的子查询。
本发明实施例中,步骤S101中,自动生成SQL语句的方法中,首先需要获取数据模型,其中,数据模型中包括了特定标注,以及生成标准格式的SQL语句的必要参数。
参照上面的例子,例如,数据模型包括第一模型标注、第二模型标注、第三模型标注以及第四模型标注。
可以看出,特定标注是用来表征生成表征格式的SQL语句的必要参数。
这样,本申请实施例中,首先会先确定出与数据库中目标数据表相对应的数据模型。具体是根据用于输入的预设编程接口指令来确定的。该预设编程接口指令中包括所需指定的数据模型。关于预设编程接口及其使用格式,在后面进行详细介绍。
S102、根据输入的调用预设编程接口的指令,调用所述预设编程接口指令中所对应的预设编程接口将所述数据模型中的特定标记使用预设生成规则生成标准格式的SQL语句;其中,所述标准格式的SQL语句中的各个部分与所述特定标注具有对应关系。
本发明实施例中,预设编程接口也是预先保存在了标准类库中的。其具体包括如下内容:
本发明实施例中,预设编程接口包括用于根据所述数据模型中的所述特定标注以及所述预设生成规则生成标准格式的SQL语句并将该标准格式的SQL语句返回的第一编程接口;
本发明实施例中,如果输入的调用预设编程接口的指令中指定的是第一编程接口,则会将数据模型中的特定标注使用预设生成规则生成标注格式的SQL语句,并返回给用户。
实际使用中,第一编程接口为的使用格式为String BuildSql<Model>()。
本发明实施例中,预设编程接口还包括用于根据所述数据模型中的所述特定标注以及所述预设生成规则生成标准格式的SQL语句并将所述特定标注中的目标参数传入该标准格式的SQL语句中执行,并将执行的结果绑定到与该结果相对应的数据模型中并返回绑定后的数据模型的第二编程接口;
本发明实施例中,第二编程接口除了会生成标准格式的SQL语句,还会将第三模型标注中的目标参数传入该SQL语句中执行,并将执行的结果与数据模型进行绑定。
本发明实施例中,如果执行结果的结果集中有多行数据,在调用第二编程接口后,会根据结果集生成与行数据匹配的多个数据模型,例如,如果有5个结果,则会对应生成5个数据模型。
然后,将每一行数据分别绑定到与之对应的数据模型中,则会生成具有绑定了执行结果的五个数据模型。将全部的数据模型返回给用户。
绑定的过程具体为:
所述执行的结果为结果集,所述结果集中有多行数据,根据每一行数据分别生成一个数据模型,将该结果集中的每一行数据的第一列数据到最后一列数据依次填充到与该行数据匹配的数据模型的属性中。得到包括包括填充结构的多个数据模型。
实际使用中,第二编程接口的使用格式具体为:
IList<Model>Select<Model>(object[]parameters)。
本发明实施例中,预设编程接口还包括用于根据所述数据模型中的所述特定标注以及所述预设生成规则生成标准格式的SQL语句并将所述特定标注中的目标参数传入该标准格式的SQL语句中执行,并将执行的结果绑定到与该结果相对应的数据模型中并返回包括该结果的第一个模型的第三编程接口。
本发明实施例中,第三编程接口与第二编程接口类似,但不同的是,返回的是绑定后的根据结果集的多行数据中第一行数据所生成的数据模型。
实际使用中,第三编程接口的使用格式具体为:
Model SelectOne<Model>(object[]parameters)。
可以看出,本申请技术方案中,可以调用不同的预设编程接口得到用户所需要的数据,如标准格式的SQL语句或者数据模型。
通过上面的实例可以看出,本发明实施例中,还包括:
执行所述标准格式的SQL语句,得到结果集;
根据所述结果集中的各个结果绑定与各个所述结果对应的数据模型。
上述提到了预设生成规则,下面对此预设生成规则进行具体介绍。
根据第一模型标注生成标准格式的SQL语句的From部分,例如,[FromTable(“m”,“Book”,“dbo”)],生成:From dbo.Bookm。
根据第二模型标注生成标准格式的SQL语句的Join部分,例如,[JoinTable(“t”,“BookType”,“dbo”,onraw=”m.Type=t.Id”)],生成:Joindbo.BookType t on(m.Type=t.Id)。
根据第三模型标注生成标准格式的SQL语句查询参数,例如,[SqlParameter(“p0”,typeof(int32))],生成:@p0。
根据第四模型标注生成标准格式的SQL语句的查询条件,例如,[SqlWhere(“$Id”,$Param(p0))],生成:Where m.Id=@p0;其中“$Id”为数据模型属性引用,$Param(p0)为数据模型参数引用。
根据第五模型标注生成标准格式的SQL语句中的分组部分,例如,[SqlGroupBy(“$Id”,“$Name”)],生成:Group By m.Id,m.Name;此例中“$Id”,“$Name”为数据模型属性引用。
根据第六模型标注生成标准格式的SQL语句中的以合计方式作为查询条件,例如:[SqlHaving(“avg(m.price)>100”)],生成:Having avg(m.price)>100。
根据第七模型标注生成标准格式的SQL语句中字段排序方式,例如,[SqlOrderBy(“$Id”)],生成:Order By m.Id;此例中“$Id”为数据模型属性引用。
根据第八模型标注生成标准格式的SQL语句中联合查询,例如,[SqlUnion(typeof(BookType))],生成:Union Select Id,Name from BookType。
根据第九模型标注生成标准格式的SQL语句中的子查询,例如,[SubQuery(typeof(BookType))],生成:(Select Id,Name from BookType)。
根据第一模型属性标注生成标准格式的SQL语句中定义目标数据表列名和列别名,例如,[SqlColumn(“UnitPrice”,price)],生成:UnitPrice as price。
根据第二模型属性标注生成标准格式的SQL语句中生成计算表达式及别名,例如[SqlCompute(“AveragePrice”,“avg($Price))],生成:avg(UnitPrice)asAveragePrice;此例中“$Price”为数据模型属性引用。
因此,本发明实施例可以调用不同预设编程接口依据上述预设生成规则来生成标准格式的SQL语句,并根据预设编程接口的功能返回不同的结果,满足开发人员的需求。
由此可见,本发明实施例具有如下有益效果。
第一,特定标注与标准格式的SQL语句的组成部分一一对应,因此,SQL开发人员无需学习成本,即可掌握。
第二,应用开发语言的代码中不再需要使用SQL语句或者如LINQ(LanguageINtegrated Query)等替代方式,使得应用代码与数据的分离,便于独立测试。
第三,特定标注与标准格式的SQL语句的组成部分一一对应,因此,可以使得软件开发人员对所生成的SQL语句有直接的控制,便于性能调优。
第四,由于无需编写标准格式的SQL语句,无需编写把SQL语句的执行结果绑定到模型的属性,因此,大大减低了编码量,提高了工作效率。
图3是本发明实施例中提供的一种自动生成SQL语句的装置的结构示意图。
参见图3,本发明另一方面公开了一种自动生成SQL语句的装置。
本发明提供了一种自动生成SQL语句的装置,包括:
数据模型确定模块1,用于根据用户输入的预设编程接口指令确定与数据库中目标数据表相对应的数据模型;其中,所述数据模型中包括特定标注,所述特定标注用于确定所述数据模型与所述目标数据表的对应关系和表征生成标准格式的SQL语句的必要参数;
SQL语句生成模块2,用于调用所述预设编程接口指令中所对应的预设编程接口将所述数据模型中的特定标记使用预设生成规则生成标准格式的SQL语句;其中,所述标准格式的SQL语句中的各个部分与所述特定标注具有对应关系。
优选的,还包括:
语句执行模块,用于执行所述标准格式的SQL语句,得到结果集;
结果绑定模块,用于根据所述结果集中的各个结果绑定与各个所述结果对应的数据模型。
优选的,所述特定标注包括模型标注和/或模型属性标注;
其中,所述模型标注用于将确定所述数据库中的目标数据表,所述模型属性标注用于确定所述目标数据表中的目标数据列。
优选的,所述模型标注具体包括:
用于确定所述目标数据表的第一模型标注;
用于将所述目标数据表与其他数据表进行关联的第二模型标注;
用于表征查询参数的第三模型标注;
用于表征查询条件的第四模型标注;
用于对结果进行分组的的第五模型标注;
用于表征以合计方式作为查询条件的第六模型标注;
用于使用字段排序方式对结果进行排序的第七模型标注;
用于执行联合查询的第八模型标注;
用于使用子查询的第九模型标注。
优选的,所述模型属性标注具体包括:
用于确定所述目标数据表中目标数据列的第一模型属性标注;
用于生成合计统计的第二模型属性标注。
优选的,所述预设编程接口以及所述预设生成规则预先设置在MVC架构中的标准类库中。
所述预设编程接口具体包括:
用于根据所述数据模型中的所述特定标注以及所述预设生成规则生成标准格式的SQL语句并将该标准格式的SQL语句返回的第一编程接口;
用于根据所述数据模型中的所述特定标注以及所述预设生成规则生成标准格式的SQL语句并将所述特定标注中的目标参数传入该标准格式的SQL语句中执行,并将执行的结果绑定到与该结果相对应的数据模型中并返回绑定后的数据模型的第二编程接口;
用于根据所述数据模型中的所述特定标注以及所述预设生成规则生成标准格式的SQL语句并将所述特定标注中的目标参数传入该标准格式的SQL语句中执行,并将执行的结果绑定到与该结果相对应的数据模型中并返回包括该结果的第一个模型的第三编程接口。
需要说明的是,本实施例的一种自动生成SQL语句的装置可以采用上述方法实施例中的一种自动生成SQL语句的方法实现各模块的功能,实现上述方法实施例中的全部技术方案,其各个模块的功能可以根据上述方法实施例中的方法具体实现,其具体实现过程可参照上述实施例中的相关描述,此处不再赘述。
本发明实施例公开了一种自动生成SQL语句的装置,所述数据模型确定模块1先根据用户输入的预设编程接口指令确定与数据库中目标数据表相对应的数据模型;其中,所述数据模型中包括特定标注,所述特定标注用于确定所述数据模型与所述目标数据表的对应关系以及生成标准格式的SQL语句的必要参数;然后SQL语句生成模块2调用预设编程接口将所述数据模型中的特定标记使用预设生成规则生成标准格式的SQL语句;其中,所述标准格式的SQL语句中的各个部分与所述特定标注具有对应关系。因此,本发明实施例中只需要调用预设编程接口就可以自动依据预设生成规则将特定标注生成标准格式的SQL语句,无需开发人员手动编写标准格式的SQL语句,减小编码量,大大提高了工作效率。
并且,由于所述标准格式的SQL语句中的各个部分与所述特定标注具有对应关系,因此,开发人员可以在极短时间内掌握和理解特定标注的使用方法,基本无需学习成本。且由于特定标注与标准格式的SQL语句有对应关系的存在,可以使得开发人员直接调整特定标注来实现对标准格式的SQL语句的调整和控制,便于复杂SQL语句性能的调整和优化。
另外,由于应用开发语言的代码中不再需要交织SQL语句,采用本发明实施例后,可以实现应用代码与SQL语句的分离,便于针对性的独立测试。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种自动生成SQL语句的方法,其特征在于,包括:
根据用户输入的预设编程接口指令确定与数据库中目标数据表相对应的数据模型;其中,所述数据模型中包括特定标注,所述特定标注用于确定所述数据模型与所述目标数据表的对应关系和表征生成标准格式的SQL语句的必要参数;
调用所述预设编程接口指令中所对应的预设编程接口将所述数据模型中的特定标记使用预设生成规则生成标准格式的SQL语句;其中,所述标准格式的SQL语句中的各个部分与所述特定标注具有对应关系。
2.根据权利要求1所述的方法,其特征在于,还包括:
执行所述标准格式的SQL语句,得到结果集;
根据所述结果集中的各个结果绑定与各个所述结果对应的数据模型。
3.根据权利要求1或2所述的方法,其特征在于,所述特定标注包括模型标注和/或模型属性标注;
其中,所述模型标注用于将确定所述数据库中的目标数据表,所述模型属性标注用于确定所述目标数据表中的目标数据列。
4.根据权利要求3所述的方法,其特征在于,所述模型标注具体包括:
用于确定所述目标数据表的第一模型标注;
用于将所述目标数据表与其他数据表进行关联的第二模型标注;
用于表征查询参数的第三模型标注;
用于表征查询条件的第四模型标注;
用于对结果进行分组的第五模型标注;
用于表征以合计方式作为查询条件的第六模型标注;
用于使用字段排序方式对结果进行排序的第七模型标注;
用于执行联合查询的第八模型标注;
用于使用子查询的第九模型标注。
5.根据权利要求3所述的方法,其特征在于,所述模型属性标注具体包括:
用于确定所述目标数据表中目标数据列的第一模型属性标注;
用于生成合计统计的第二模型属性标注。
6.根据权利要求1至5任意一项所述的方法,其特征在于,所述预设编程接口以及所述预设生成规则预先设置在MVC架构中的标准类库中。
7.根据权利要求3所述的方法,其特征在于,所述预设编程接口具体包括:
用于根据所述数据模型中的所述特定标注以及所述预设生成规则生成标准格式的SQL语句并将该标准格式的SQL语句返回的第一编程接口;
用于根据所述数据模型中的所述特定标注以及所述预设生成规则生成标准格式的SQL语句并将所述特定标注中的目标参数传入该标准格式的SQL语句中执行,并将执行的结果绑定到与该结果相对应的数据模型中并返回绑定后的数据模型的第二编程接口;
用于根据所述数据模型中的所述特定标注以及所述预设生成规则生成标准格式的SQL语句并将所述特定标注中的目标参数传入该标准格式的SQL语句中执行,并将执行的结果绑定到与该结果相对应的数据模型中并返回包括该结果的第一个模型的第三编程接口。
8.一种自动生成SQL语句的装置,其特征在于,包括:
数据模型确定模块,用于根据用户输入的预设编程接口指令确定与数据库中目标数据表相对应的数据模型;其中,所述数据模型中包括特定标注,所述特定标注用于确定所述数据模型与所述目标数据表的对应关系和表征生成标准格式的SQL语句的必要参数;
SQL语句生成模块,用于调用所述预设编程接口指令中所对应的预设编程接口将所述数据模型中的特定标记使用预设生成规则生成标准格式的SQL语句;其中,所述标准格式的SQL语句中的各个部分与所述特定标注具有对应关系。
9.根据权利要求8所述的装置,其特征在于,还包括:
语句执行模块,用于执行所述标准格式的SQL语句,得到结果集;
结果绑定模块,用于根据所述结果集中的各个结果绑定与各个所述结果对应的数据模型。
10.根据权利要求8或9所述的装置,其特征在于,所述特定标注包括模型标注和/或模型属性标注;
其中,所述模型标注用于将确定所述数据库中的目标数据表,所述模型属性标注用于确定所述目标数据表中的目标数据列。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810631425.0A CN108846101B (zh) | 2018-06-19 | 2018-06-19 | 一种自动生成sql语句的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810631425.0A CN108846101B (zh) | 2018-06-19 | 2018-06-19 | 一种自动生成sql语句的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108846101A true CN108846101A (zh) | 2018-11-20 |
CN108846101B CN108846101B (zh) | 2021-06-22 |
Family
ID=64203275
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810631425.0A Active CN108846101B (zh) | 2018-06-19 | 2018-06-19 | 一种自动生成sql语句的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108846101B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109558447A (zh) * | 2018-12-14 | 2019-04-02 | 万翼科技有限公司 | 数据管理方法、装置及计算机可读存储介质 |
CN111506303A (zh) * | 2019-01-30 | 2020-08-07 | 北大方正信息产业集团有限公司 | 数据交互方法和装置 |
CN111563142A (zh) * | 2020-07-14 | 2020-08-21 | 成都四方伟业软件股份有限公司 | 一种sql自动对标的匹配方法及装置 |
CN113792071A (zh) * | 2021-09-18 | 2021-12-14 | 上海中通吉网络技术有限公司 | Sql智能生成并调优组件和方法 |
CN114443782A (zh) * | 2022-02-10 | 2022-05-06 | 奇安信科技集团股份有限公司 | 图形数据库的数据处理方法、装置、电子设备和存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101114226A (zh) * | 2007-08-28 | 2008-01-30 | 北京中企开源信息技术有限公司 | 一种基于模型组件的代码自动生成装置、系统及方法 |
CN102722372A (zh) * | 2012-05-25 | 2012-10-10 | 上海学智科技有限公司 | 一种通过分类配置自动生成代码的方法及系统 |
CN103226478A (zh) * | 2013-05-22 | 2013-07-31 | 北京金和软件股份有限公司 | 一种自动生成并使用代码的方法 |
CN107256144A (zh) * | 2017-04-28 | 2017-10-17 | 努比亚技术有限公司 | 前后台代码自动生成方法、终端及计算机可读存储介质 |
-
2018
- 2018-06-19 CN CN201810631425.0A patent/CN108846101B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101114226A (zh) * | 2007-08-28 | 2008-01-30 | 北京中企开源信息技术有限公司 | 一种基于模型组件的代码自动生成装置、系统及方法 |
CN102722372A (zh) * | 2012-05-25 | 2012-10-10 | 上海学智科技有限公司 | 一种通过分类配置自动生成代码的方法及系统 |
CN103226478A (zh) * | 2013-05-22 | 2013-07-31 | 北京金和软件股份有限公司 | 一种自动生成并使用代码的方法 |
CN103226478B (zh) * | 2013-05-22 | 2016-12-28 | 北京金和软件股份有限公司 | 一种自动生成并使用代码的方法 |
CN107256144A (zh) * | 2017-04-28 | 2017-10-17 | 努比亚技术有限公司 | 前后台代码自动生成方法、终端及计算机可读存储介质 |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109558447A (zh) * | 2018-12-14 | 2019-04-02 | 万翼科技有限公司 | 数据管理方法、装置及计算机可读存储介质 |
CN111506303A (zh) * | 2019-01-30 | 2020-08-07 | 北大方正信息产业集团有限公司 | 数据交互方法和装置 |
CN111563142A (zh) * | 2020-07-14 | 2020-08-21 | 成都四方伟业软件股份有限公司 | 一种sql自动对标的匹配方法及装置 |
CN113792071A (zh) * | 2021-09-18 | 2021-12-14 | 上海中通吉网络技术有限公司 | Sql智能生成并调优组件和方法 |
CN114443782A (zh) * | 2022-02-10 | 2022-05-06 | 奇安信科技集团股份有限公司 | 图形数据库的数据处理方法、装置、电子设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN108846101B (zh) | 2021-06-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108846101A (zh) | 一种自动生成sql语句的方法和装置 | |
Vilain et al. | A diagrammatic tool for representing user interaction in UML | |
CN101617292B (zh) | 面向生成器图的编程和执行 | |
US7861177B2 (en) | Software configuration program for software applications | |
CN101589366B (zh) | 面向生成器图的编程框架中的并行化和植入 | |
US8775330B2 (en) | Establishing a data management fee structure based on fine grained data entities | |
CN107729003A (zh) | 代码的自动生成方法、装置及电子设备 | |
JP2006526209A (ja) | コンポーネント基盤環境下で拡張されたメタデータを利用したソフトウェア開発方法及びその開発システム | |
JP5192634B2 (ja) | 宣言順レポートパラメータ化 | |
JP2009245441A (ja) | コンポーネント基盤環境下で拡張されたメタデータを利用したソフトウェア開発方法及びその開発システム | |
CN111813798A (zh) | 基于r2rml标准的映射方法、装置、设备及存储介质 | |
CN111125440A (zh) | 一种基于Monad的持久层复合条件查询方法与存储介质 | |
US20060047723A1 (en) | Custom database system and method of building the same | |
US8041728B2 (en) | Utilization of display profiles with abstract queries | |
US20080022258A1 (en) | Custom database system and method of building and operating the same | |
US8631393B2 (en) | Custom database system and method of building and operating the same | |
Zeyda et al. | Mechanised translation of control law diagrams into Circus | |
Zhang et al. | A framework for the efficient production of web applications | |
CN101458709B (zh) | 复杂产品试验数据追溯方法 | |
Armonas et al. | Pattern based generation of full-fledged relational schemas from UML/OCL models | |
Liu et al. | Toward easy delivery of device-oriented adaptive user interface on mobile devices | |
CN113778512B (zh) | 谈判数据处理方法及设备 | |
Hohenstein et al. | A generative approach to database federation | |
TWI512510B (zh) | 以多項獨立查詢條件查詢資料庫內容之方法 | |
JP2006209655A (ja) | システム開発支援方法及びシステム開発支援プログラム |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |