CN110019335B - 一种基于注解对sql查询语句进行动态扩展的方法及系统 - Google Patents
一种基于注解对sql查询语句进行动态扩展的方法及系统 Download PDFInfo
- Publication number
- CN110019335B CN110019335B CN201710966660.9A CN201710966660A CN110019335B CN 110019335 B CN110019335 B CN 110019335B CN 201710966660 A CN201710966660 A CN 201710966660A CN 110019335 B CN110019335 B CN 110019335B
- Authority
- CN
- China
- Prior art keywords
- statement
- sql query
- condition
- annotation
- query
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24534—Query rewriting; Transformation
- G06F16/24547—Optimisations to support specific applications; Extensibility of optimisers
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于注解对SQL查询语句进行动态扩展的方法及系统,其特征在于,所述方法包括:获取现有SQL查询语句和所述现有SQL查询语句所要应用的一个或多个场景;对所述一个或多个场景进行解析,确定所述现有SQL查询语句的结构;根据注解的添加规则并且按照所述现有SQL查询语句的结构,对所述现有SQL查询语句的注解进行配置,获取注解后的SQL查询语句;对所述注解后的SQL查询语句的注解参数进行解析,获取已经查询的相关列信息、关联的数据库表信息、查询条件和排序方式;以及根据所述已经查询的相关列信息、关联的数据库表信息、查询条件和排序方式利用扩展规则对注解后的SQL查询语句进行动态扩展。
Description
技术领域
本发明涉及SQL语句处理领域,并且更具体地,涉及一种基于注解对SQL查询语句进行动态扩展的方法及系统。
背景技术
信息化已经成为世界经济和社会发展的大趋势,信息系统的建设是信息化工作的关键。这足以看到信息系统的重要性,在我们的软件产品中,为了满足不同的行业、不同的地域、不同的客户的各种需求,针对同一类数据的展现,会出现多种的展现风格。
为了满足这些需求,我们将客户分类区分,为不同的行业、不同的地域等分别开发行业通用页面,这样可以增加我们软件的适应性。但这样并不能完全满足每个行业或地域的个性需求。因此针对同一查询需求,不同客户所要关注的点不同,因此所要看到的信息也不同。进而我们提出了另外的解决方案,就是将所有我们能想到的查询数据全部列到我们的查询语句中,每个行业或地域的客户通过设定前台的展现去满足不同的需求。但这样会使我们的SQL语句查询的内容和字段变的臃肿,效率会大大下降。
发明内容
本发明提供了一种基于注解对SQL查询语句进行动态扩展的方法及系统,以解决现有SQL查询语句不能动态扩展的问题。
为了解决上述问题,根据本发明的一个方面,提供了一种基于注解对SQL查询语句进行动态扩展的方法,所述方法包括:
获取现有SQL查询语句和所述现有SQL查询语句所要应用的一个或多个场景;
对所述一个或多个场景进行解析,确定所述现有SQL查询语句的结构;
根据注解的添加规则并且按照所述现有SQL查询语句的结构,对所述现有SQL查询语句的注解进行配置,获取注解后的SQL查询语句;
对所述注解后的SQL查询语句的注解参数进行解析,获取已经查询的相关列信息、关联的数据库表信息、查询条件和排序方式;
根据所述已经查询的相关列信息、关联的数据库表信息、查询条件和排序方式利用扩展规则对注解后的SQL查询语句进行动态扩展。
优选地,其中所述注解添加规则包括:
在现有SQL查询语句的from之前的位置增加注解@field,用于注解现有SQL查询语句已经设置的查询字段,其中多个查询字段之间用逗号间隔;
在现有SQL查询语句的所有关联表之后,where条件之前的位置增加注解@table,用于注解现有SQL查询语句中已经关联的数据库表和对应的别名,其中多个数据库表之间用逗号间隔;
如果现有SQL查询语句有查询条件,则在现有SQL查询语句的原查询条件之后增加注解@where,如果现有SQL查询语句没有查询条件,则在注解@table之后增加注解@where,用于注解需要扩展的查询条件的位置以及需要扩展的查询条件和现有SQL查询语句中的查询条件之间的关系;
如果现有SQL查询语句有排序方式,则在现有SQL查询语句的排序之后增加注解@order,如果现有SQL查询语句没有排序方式,则在现有SQL查询语句的最后增加注解@order,用于注解需要扩展的排序条件的位置以及需要扩展的排序方式和现有SQL查询语句中的排序方式之间的关系。
优选地,其中
所述注解@where的条件参数包括:and、or和no中的一种,
如果条件参数为and,则表示需要扩展的查询条件和现有SQL查询语句的查询条件之间是并且的关系;
如果条件参数为or,则表示需要扩展的查询条件和现有SQL查询语句的查询条件之间是或者的关系;
如果条件参数为no,则表示现有SQL查询语句中没有查询条件。
优选地,其中
所述注解@order的排序参数包括:order by之后的排序字段和no中的一种,
如果所述排序参数为order by之后的排序字段,则表示现有SQL查询语句包括排序字段;
如果所述排序参数为no,则表示现有SQL查询语句中没有排序字段。
优选地,其中所述扩展规则包括:
如果对查询字段进行扩展,则将注解@field替换为扩展的查询字段语句,其中查询字段的扩展格式为:“,表的别名.字段名称字段名称的别名”,其中,若字段名称的别名不存在,则为空;
如果对查询条件进行扩展,则
当现有SQL查询语句中存在where查询条件时,将注解@where替换为扩展的查询条件语句,其中查询条件的扩展格式为:“and/or表的别名.字段名称=“字段值””;
当现有SQL查询语句中不存在where查询条件时,将注解@where替换为扩展的查询条件语句,其中查询件的扩展格式为:“where表的别名.字段名称=“字段值””;
如果对排序字段进行扩展,则
当现有SQL查询语句中存在order by排序方式时,将原排序条件语句以及注解@order替换为新的排序条件语句;
当现有SQL查询语句中不存在order by排序方式时,将注解@order替换为新的排序条件语句;
其中所述排序条件语句的扩展格式为:“order by排序的字段名称排序的方式”;
如果对关联的业务表进行扩展,则将注解@table替换为扩展的关联的业务表语句,其中所述扩展的关联的业务表语句的扩展格式为:“关联方式关联的业务表名关联的业务表别名on原业务表表名.原业务表的主键=关联的业务表表名.关联的业务表的主键”。
根据本发明的另一个方面,提供了一种基于注解对SQL查询语句进行动态扩展的系统,所述系统包括:
获取单元,用于获取现有SQL查询语句和所述现有SQL查询语句所要应用的一个或多个场景;
结构确定单元,用于对所述一个或多个场景进行解析,确定所述现有SQL查询语句的结构;
注解配置单元,用于根据注解的添加规则并且按照所述现有SQL查询语句的结构,对所述现有SQL查询语句的注解进行配置,获取注解后的SQL查询语句;
解析单元,用于对所述注解后的SQL查询语句的注解参数进行解析,获取已经查询的相关列信息、关联的数据库表信息、查询条件和排序方式;
扩展单元,用于根据所述已经查询的相关列信息、关联的数据库表信息、查询条件和排序方式利用扩展规则对注解后的SQL查询语句进行动态扩展。
优选地,其中所述注解添加规则包括:
在现有SQL查询语句的from之前的位置增加注解@field,用于注解现有SQL查询语句已经设置的查询字段,其中多个查询字段之间用逗号间隔;
在现有SQL查询语句的所有关联表之后,where条件之前的位置增加注解@table,用于注解现有SQL查询语句中已经关联的数据库表和对应的别名,其中多个数据库表之间用逗号间隔;
如果现有SQL查询语句有查询条件,则在现有SQL查询语句的原查询条件之后增加注解@where,如果现有SQL查询语句没有查询条件,则在注解@table之后增加注解@where,用于注解需要扩展的查询条件的位置以及需要扩展的查询条件和现有SQL查询语句中的查询条件之间的关系;
如果现有SQL查询语句有排序方式,则在现有SQL查询语句的排序之后增加注解@order,如果现有SQL查询语句没有排序方式,则在现有SQL查询语句的最后增加注解@order,用于注解需要扩展的排序条件的位置以及需要扩展的排序方式和现有SQL查询语句中的排序方式之间的关系。
优选地,其中
所述注解@where的条件参数包括:and、or和no中的一种,
如果条件参数为and,则表示需要扩展的查询条件和现有SQL查询语句的查询条件之间是并且的关系;
如果条件参数为or,则表示需要扩展的查询条件和现有SQL查询语句的查询条件之间是或者的关系;
如果条件参数为no,则表示现有SQL查询语句中没有查询条件。
优选地,其中
所述注解@order的排序参数包括:order by之后的排序字段和no中的一种,
如果所述排序参数为order by之后的排序字段,则表示现有SQL查询语句包括排序字段;
如果所述排序参数为no,则表示现有SQL查询语句中没有排序字段。
优选地,其中所述扩展规则包括:
如果对查询字段进行扩展,则将注解@field替换为扩展的查询字段语句,其中查询字段的扩展格式为:“,表的别名.字段名称字段名称的别名”,其中,若字段名称的别名不存在,则为空;
如果对查询条件进行扩展,则
当现有SQL查询语句中存在where查询条件时,将注解@where替换为扩展的查询条件语句,其中查询条件的扩展格式为:“and/or表的别名.字段名称=“字段值””;
当现有SQL查询语句中不存在where查询条件时,将注解@where替换为扩展的查询条件语句,其中查询件的扩展格式为:“where表的别名.字段名称=“字段值””;
如果对排序字段进行扩展,则
当现有SQL查询语句中存在order by排序方式时,将原排序条件语句以及注解@order替换为新的排序条件语句;
当现有SQL查询语句中不存在order by排序方式时,将注解@order替换为新的排序条件语句;
其中所述排序条件语句的扩展格式为:“order by排序的字段名称排序的方式”;
如果对关联的业务表进行扩展,则将注解@table替换为扩展的关联的业务表语句,其中所述扩展的关联的业务表语句的扩展格式为:“关联方式关联的业务表名关联的业务表别名on原业务表表名.原业务表的主键=关联的业务表表名.关联的业务表的主键”。
本发明提供了一种基于注解对SQL查询语句进行动态扩展的方法及系统,通过在现有SQL中添加注解,通过注解对当前SQL语句的结构进行解析,然后根据不同行业、地域等客户的不同需求,进行动态的SQL语句扩展,最终生成可以满足需求的SQL进行查询,在不用修改原始SQL语句和程序的同时,根据需求动态扩展SQL查询语句,满足了不同的客户需求。
附图说明
通过参考下面的附图,可以更为完整地理解本发明的示例性实施方式:
图1为根据本发明实施方式的基于注解对SQL查询语句进行动态扩展的方法100的流程图;以及
图2为根据本发明实施方式的基于注解对SQL查询语句进行动态扩展的系统200的示意图。
具体实施方式
现在参考附图介绍本发明的示例性实施方式,然而,本发明可以用许多不同的形式来实施,并且不局限于此处描述的实施例,提供这些实施例是为了详尽地且完全地公开本发明,并且向所属技术领域的技术人员充分传达本发明的范围。对于表示在附图中的示例性实施方式中的术语并不是对本发明的限定。在附图中,相同的单元/元件使用相同的附图标记。
除非另有说明,此处使用的术语(包括科技术语)对所属技术领域的技术人员具有通常的理解含义。另外,可以理解的是,以通常使用的词典限定的术语,应当被理解为与其相关领域的语境具有一致的含义,而不应该被理解为理想化的或过于正式的意义。
图1为根据本发明实施方式的基于注解对SQL查询语句进行动态扩展的方法100的流程图。本发明实施方式的基于注解对SQL查询语句进行动态扩展的方法获取现有SQL查询语句和所述现有SQL查询语句所要应用的一个或多个场景;对所述一个或多个场景进行解析,确定所述现有SQL查询语句的结构;根据注解的添加规则并且按照所述现有SQL查询语句的结构,对所述现有SQL查询语句的注解进行配置,获取注解后的SQL查询语句;对所述注解后的SQL查询语句的注解参数进行解析,获取已经查询的相关列信息、关联的数据库表信息、查询条件和排序方式;根据所述已经查询的相关列信息、关联的数据库表信息、查询条件和排序方式利用扩展规则对注解后的SQL查询语句进行动态扩展。通过注解配置,可以将原SQL语句的架构进行了解,然后通过封装一些替换规则和方法,最终将注解替换成我们扩展的SQL语句,可以在不修改程序代码的情况下,根据需求动态扩展SQL。如图1所示,所述基于注解对SQL查询语句进行动态扩展的方法100从步骤101处开始,在步骤101获取现有SQL查询语句和所述现有SQL查询语句所要应用的一个或多个场景。
优选地,在步骤102对所述一个或多个场景进行解析,确定所述现有SQL查询语句的结构。
为了达到对SQL查询语句的动态扩展,我们需要对原始SQL查询语句进行了解。我们需要知道当前SQL查询语句已经查询了什么字段、已经关联了什么数据库表、已经添加了什么查询条件、已经增加了什么排序。知道了SQL查询语句的这四个内容,我们就能了解该语句的具体结构,从而为我们后面的动态SQL查询语句扩展提供便利。
优选地,在步骤103根据注解的添加规则并且按照所述现有SQL查询语句的结构,对所述现有SQL查询语句的注解进行配置,获取注解后的SQL查询语句。
优选地,其中所述注解添加规则包括:
在现有SQL查询语句的from之前的位置增加注解@field,用于注解现有SQL查询语句已经设置的查询字段,其中多个查询字段之间用逗号间隔;
在现有SQL查询语句的所有关联表之后,where条件之前的位置增加注解@table,用于注解现有SQL查询语句中已经关联的数据库表和对应的别名,其中多个数据库表之间用逗号间隔;
如果现有SQL查询语句有查询条件,则在现有SQL查询语句的原查询条件之后增加注解@where,如果现有SQL查询语句没有查询条件,则在注解@table之后增加注解@where,用于注解需要扩展的查询条件的位置以及需要扩展的查询条件和现有SQL查询语句中的查询条件之间的关系;
如果现有SQL查询语句有排序方式,则在现有SQL查询语句的排序之后增加注解@order,如果现有SQL查询语句没有排序方式,则在现有SQL查询语句的最后增加注解@order,用于注解需要扩展的排序条件的位置以及需要扩展的排序方式和现有SQL查询语句中的排序方式之间的关系。
优选地,其中
所述注解@where的条件参数包括:and、or和no中的一种,
如果条件参数为and,则表示需要扩展的查询条件和现有SQL查询语句的查询条件之间是并且的关系;
如果条件参数为or,则表示需要扩展的查询条件和现有SQL查询语句的查询条件之间是或者的关系;
如果条件参数为no,则表示现有SQL查询语句中没有查询条件。
优选地,其中
所述注解@order的排序参数包括:order by之后的排序字段和no中的一种,
如果所述排序参数为order by之后的排序字段,则表示现有SQL查询语句包括排序字段;
如果所述排序参数为no,则表示现有SQL查询语句中没有排序字段。
在本发明的实施方式中,针对SQL查询语句的这四个构成,我们分别定义了四种不同的注解:@field、@table、@where、@order。
@field注解的主要是提供当前SQL查询语句已经查询的字段,为我们后面扩展SQL查询语句添加字段做准备,避免重复添加字段导致SQL查询语句报错。并且该注解的位置在SQL查询语句的from之前,也是我们动态扩展SQL查询语句添加查询字段的位置。该注解的参数是已经查询出来的字段设置。
@table注解的主要功能是提供当前SQL查询语句中已经关联的数据库表和别名。方便我们对SQL扩展的时候添加已经关联数据库表的列,并且我们可以通过对这些数据库表进行连接,进而添加其他数据库表进来,从而也可以将添加进来数据库表的列进行查询展示。@table的注解的位置是所有关联表之后,where条件之前的位置,这个位置也是我们之后扩展添加数据库表的位置。该字段的参数为已经关联的数据库表的集合,多个表之间用逗号分开。
@where注解的主要功能是提供扩展查询条件的位置和原SQL查询语句的查询条件之间的关系。如果原查询有查询条件则注解放到查询条件之后,如注解没有查询条件,则放到@table之后。该注解的参数有三种[and、or、no],and的意思是扩展的查询条件和原查询条件是并且的关系,or的意思是扩展的查询条件和原查询条件是或者的关系,no的意思是原查询没有查询条件。
@order注解的主要功能是提供查询中的排序方式,如原查询SQL查询语句存在排序,则注解放到查询SQL查询语句的排序之后,如果没有排序,则放到需要扩展添加排序的位置。该注解的参数有两种,一种是按照order by之后的查询字段来写,另外一个是固定值no,意思原SQL查询语句没有排序字段。
在使用注解的时候,需要满足一定的条件,关联表是需要配置别名的。具体的注解配置实例如下:
select a.field1,a.field2,b.field1,b.field2,c.*
@field[a.field1,a.field2,b.field1,b.field2,c.*]
from table_a a
left join table_b b on a.guid=b.guid
left join table_c c on b.guid=c.guid
@table[table_a a,table_b b,table_c c]
where a.name=‘名称1’
@where[and]
order by a.name
@order[a.name]
在配置注解的时候,如果已经关联的业务表不会在程序中进行任何的SQL语句扩展,则对应的@field和@table中可以将其忽略,避免多余的配置。
优选地,在步骤104对所述注解后的SQL查询语句的注解参数进行解析,获取已经查询的相关列信息、关联的数据库表信息、查询条件和排序方式。
在对原SQL查询语句进行了注解之后,我们就可以在程序中获取到整个SQL查询语句的框架。在程序处理的时候,可以对SQL查询语句的注解通过注解的参数进行解析,获取到当前查询中已经查询出的相关列信息、已经关联好的数据库表和其别名、已经存在的排序等。然后通过封装一些方法,利用这些信息进行SQL查询语句的扩展。
优选地,在步骤105根据所述已经查询的相关列信息、关联的数据库表信息、查询条件和排序方式利用扩展规则对注解后的SQL查询语句进行动态扩展。
优选地,其中所述扩展规则包括:
如果对查询字段进行扩展,则将注解@field替换为扩展的查询字段语句,其中查询字段的扩展格式为:“,表的别名.字段名称字段名称的别名”,其中,若字段名称的别名不存在,则为空;
如果对查询条件进行扩展,则
当现有SQL查询语句中存在where查询条件时,将注解@where替换为扩展的查询条件语句,其中查询条件的扩展格式为:“and/or表的别名.字段名称=“字段值””;
当现有SQL查询语句中不存在where查询条件时,将注解@where替换为扩展的查询条件语句,其中查询件的扩展格式为:“where表的别名.字段名称=“字段值””;
如果对排序字段进行扩展,则
当现有SQL查询语句中存在order by排序方式时,将原排序条件语句以及注解@order替换为新的排序条件语句;
当现有SQL查询语句中不存在order by排序方式时,将注解@order替换为新的排序条件语句;
其中所述排序条件语句的扩展格式为:“order by排序的字段名称排序的方式”;
如果对关联的业务表进行扩展,则将注解@table替换为扩展的关联的业务表语句,其中所述扩展的关联的业务表语句的扩展格式为:“关联方式关联的业务表名关联的业务表别名on原业务表表名.原业务表的主键=关联的业务表表名.关联的业务表的主键”。
在本发明的实施方式中,
为查询SQL动态扩展查询字段,可以通过表名、别名为查询SQL添加查询字段,并选择是否为添加字段赋别名。如查询SQL中有表table_a别名为a,为别名a或者表table_a添加字段addField1无别名,字段addField2别名为reName。在最终查询的时候会将@field注解替换为字符串“,a.addField1,a.addField2rename”。
为查询SQL动态扩展查询条件,可以通过表名、别名为查询SQL动态扩展查询条件。如查询SQL中有表table_a别名为a,扩展查询条件为table_a的cName字段等于“名称”。在最终查询的时候会将@where注解进行替换,这里替换的时候有三种情况:
@where[and]说明原SQL存在where并且扩展的查询条件和原条件是并且的关系,替换字符串为“and a.cName=‘名称’”;
@where[or]说明原SQL存在where并且扩展的查询条件和原条件是或者的关系,替换字符串为“or(a.cName=‘名称’)”;
@where[no]说明原SQL不存在where查询条件,替换的时候需要添加where关键字,替换字符串为“where a.cName=‘名称’”。
为查询SQL动态扩展排序条件,可以通过表名、别名为查询SQL动态扩展排序条件。如查询SQL中有表table_a别名为a,扩展排序条件为table_a的字段cCode,并且是降序排列。在最终查询的时候会将@order进行替换,这里替换的时候存在两种情况:
@order[a.cName]说明之前存在排序字段,即原SQL存在order by a.cName,替换的时候需要将原排序条件截取掉,然后生成新的排序条件替换。先删掉order by a.cName然后将注解替换成“order by cCode DESC”;
@order[no]说明原查询SQL不存在排序条件,则直接将注解替换成order bycCode DESC”即可。
为查询SQL动态扩展关联业务表。可以通过现有表名、别名和关联字段去关联业务表。如查询表中有table_a别名为a,其列cHeadGuid中保存的是要关联的业务表table_b的主键cguid,指定关联方式为left join。在最终查询的时候,会将@table注解替换为字符串“left join table_b b on a.cHeadGuid=b.cguid”。增加关联业务表之后,关联后的业务表和之前配置的表都可以通过添加字段的方式去扩展查询字段、扩展查询条件、扩展排序条件。
根据扩展规则,在相应的注解下替换对应的内容,添加的字段会替换@field注解,添加的表关联内容会替换@table标签,添加扩展的查询条件内容会根据规则替换@where注解,添加或修改的排序字段会替换@order注解。
以下具体举例说明本发明的实施方式
原SQL查询语句添加注解后为:
Select a.field1@field[a.field1]
from table_a a@table[table_a a]
where a.name=‘名称’
@where[and]
@order[no]
(1)扩展关联业务表table_b,关联字段为table_a的cHeadGuid字段保存的是table_b表中的主键cguid,并且为关联业务表table_b赋别名b,关联方式为left join。关联之后,为查询添加业务表table_b的cName列信息。按照相应的设置方法将SQL替换,替换后最终执行的SQL为:
select a.field1,b.cName
from table_a a
Left join table_b b on a.cHeadGuid=b.cguid
where a.name=‘名称’
(2)扩展关联业务表table_c,关联字段为table_a的cMatGuid字段保存的是table_c表中的主键cguid,并且关联业务表table_c赋别名c,关联方式为inner join。关联之后,添加业务表c的cName列,并赋别名cMatName,增加table_c中的cGroupId为1的条件,并添加排序字段为table_c表中的cCode,按照扩展规则,替换后最终执行的SQL为:
select a.field1,c.cName cMatName
from table_a a
inner join table_c c on a.cMatGuid=c.cguid
where a.name=‘名称’
and c.cGroupId=‘1’
order by c.cCode
图2为根据本发明实施方式的基于注解对SQL查询语句进行动态扩展的系统200的示意图。如图2所示,所述基于注解对SQL查询语句进行动态扩展的系统200包括:获取单元201、结构确定单元202、注解配置单元203、解析单元204和扩展单元205。
优选地,在获取单元201,获取现有SQL查询语句和所述现有SQL查询语句所要应用的一个或多个场景。
优选地,在结构确定单元202,对所述一个或多个场景进行解析,确定所述现有SQL查询语句的结构。
优选地,在注解配置单元203,根据注解的添加规则并且按照所述现有SQL查询语句的结构,对所述现有SQL查询语句的注解进行配置,获取注解后的SQL查询语句。优选地,其中所述注解添加规则包括:
在现有SQL查询语句的from之前的位置增加注解@field,用于注解现有SQL查询语句已经设置的查询字段,其中多个查询字段之间用逗号间隔;
在现有SQL查询语句的所有关联表之后,where条件之前的位置增加注解@table,用于注解现有SQL查询语句中已经关联的数据库表和对应的别名,其中多个数据库表之间用逗号间隔;
如果现有SQL查询语句有查询条件,则在现有SQL查询语句的原查询条件之后增加注解@where,如果现有SQL查询语句没有查询条件,则在注解@table之后增加注解@where,用于注解需要扩展的查询条件的位置以及需要扩展的查询条件和现有SQL查询语句中的查询条件之间的关系;
如果现有SQL查询语句有排序方式,则在现有SQL查询语句的排序之后增加注解@order,如果现有SQL查询语句没有排序方式,则在现有SQL查询语句的最后增加注解@order,用于注解需要扩展的排序条件的位置以及需要扩展的排序方式和现有SQL查询语句中的排序方式之间的关系。
优选地,其中
所述注解@where的条件参数包括:and、or和no中的一种,
如果条件参数为and,则表示需要扩展的查询条件和现有SQL查询语句的查询条件之间是并且的关系;
如果条件参数为or,则表示需要扩展的查询条件和现有SQL查询语句的查询条件之间是或者的关系;
如果条件参数为no,则表示现有SQL查询语句中没有查询条件。
优选地,其中
所述注解@order的排序参数包括:order by之后的排序字段和no中的一种,
如果所述排序参数为order by之后的排序字段,则表示现有SQL查询语句包括排序字段;
如果所述排序参数为no,则表示现有SQL查询语句中没有排序字段。
优选地,在解析单元204,对所述注解后的SQL查询语句的注解参数进行解析,获取已经查询的相关列信息、关联的数据库表信息、查询条件和排序方式。
优选地,在扩展单元205,根据所述已经查询的相关列信息、关联的数据库表信息、查询条件和排序方式利用扩展规则对注解后的SQL查询语句进行动态扩展。
优选地,其中所述扩展规则包括:
如果对查询字段进行扩展,则将注解@field替换为扩展的查询字段语句,其中查询字段的扩展格式为:“,表的别名.字段名称字段名称的别名”,其中,若字段名称的别名不存在,则为空;
如果对查询条件进行扩展,则
当现有SQL查询语句中存在where查询条件时,将注解@where替换为扩展的查询条件语句,其中查询条件的扩展格式为:“and/or表的别名.字段名称=“字段值””;
当现有SQL查询语句中不存在where查询条件时,将注解@where替换为扩展的查询条件语句,其中查询件的扩展格式为:“where表的别名.字段名称=“字段值””;
如果对排序字段进行扩展,则
当现有SQL查询语句中存在order by排序方式时,将原排序条件语句以及注解@order替换为新的排序条件语句;
当现有SQL查询语句中不存在order by排序方式时,将注解@order替换为新的排序条件语句;
其中所述排序条件语句的扩展格式为:“order by排序的字段名称排序的方式”;
如果对关联的业务表进行扩展,则将注解@table替换为扩展的关联的业务表语句,其中所述扩展的关联的业务表语句的扩展格式为:“关联方式关联的业务表名关联的业务表别名on原业务表表名.原业务表的主键=关联的业务表表名.关联的业务表的主键”。
本发明的实施例的基于注解对SQL查询语句进行动态扩展的系统200与本发明的另一个实施例的基于注解对SQL查询语句进行动态扩展的系统方法100相对应,在此不再赘述。
已经通过参考少量实施方式描述了本发明。然而,本领域技术人员所公知的,正如附带的专利权利要求所限定的,除了本发明以上公开的其他的实施例等同地落在本发明的范围内。
通常地,在权利要求中使用的所有术语都根据他们在技术领域的通常含义被解释,除非在其中被另外明确地定义。所有的参考“一个/所述/该[装置、组件等]”都被开放地解释为所述装置、组件等中的至少一个实例,除非另外明确地说明。这里公开的任何方法的步骤都没必要以公开的准确的顺序运行,除非明确地说明。
Claims (8)
1.一种基于注解对SQL查询语句进行动态扩展的方法,其特征在于,所述方法包括:
获取现有SQL查询语句和所述现有SQL查询语句所要应用的一个或多个场景;
对所述一个或多个场景进行解析,确定所述现有SQL查询语句的结构;
根据注解的添加规则并且按照所述现有SQL查询语句的结构,对所述现有SQL查询语句的注解进行配置,获取注解后的SQL查询语句;
对所述注解后的SQL查询语句的注解参数进行解析,获取已经查询的相关列信息、关联的数据库表信息、查询条件和排序方式;
根据所述已经查询的相关列信息、关联的数据库表信息、查询条件和排序方式利用扩展规则对注解后的SQL查询语句进行动态扩展;
其中,所述扩展规则包括:
如果对查询字段进行扩展,则将注解@field替换为扩展的查询字段语句,其中查询字段的扩展格式为:“,表的别名.字段名称字段名称的别名”,其中,若字段名称的别名不存在,则为空;
如果对查询条件进行扩展,则
当现有SQL查询语句中存在where查询条件时,将注解@where替换为扩展的查询条件语句,其中查询条件的扩展格式为:“and/or表的别名.字段名称=“字段值””;
当现有SQL查询语句中不存在where查询条件时,将注解@where替换为扩展的查询条件语句,其中查询件的扩展格式为:“where表的别名.字段名称=“字段值””;
如果对排序字段进行扩展,则
当现有SQL查询语句中存在order by排序方式时,将原排序条件语句以及注解@order替换为新的排序条件语句;
当现有SQL查询语句中不存在order by排序方式时,将注解@order替换为新的排序条件语句;
其中所述排序条件语句的扩展格式为:“order by排序的字段名称排序的方式”;
如果对关联的业务表进行扩展,则将注解@table替换为扩展的关联的业务表语句,其中所述扩展的关联的业务表语句的扩展格式为:“关联方式关联的业务表名关联的业务表别名on原业务表表名.原业务表的主键=关联的业务表表名.关联的业务表的主键”。
2.根据权利要求1所述的方法,其特征在于,所述注解添加规则包括:
在现有SQL查询语句的from之前的位置增加注解@field,用于注解现有SQL查询语句已经设置的查询字段,其中多个查询字段之间用逗号间隔;
在现有SQL查询语句的所有关联表之后,where条件之前的位置增加注解@table,用于注解现有SQL查询语句中已经关联的数据库表和对应的别名,其中多个数据库表之间用逗号间隔;
如果现有SQL查询语句有查询条件,则在现有SQL查询语句的原查询条件之后增加注解@where,如果现有SQL查询语句没有查询条件,则在注解@table之后增加注解@where,用于注解需要扩展的查询条件的位置以及需要扩展的查询条件和现有SQL查询语句中的查询条件之间的关系;
如果现有SQL查询语句有排序方式,则在现有SQL查询语句的排序之后增加注解@order,如果现有SQL查询语句没有排序方式,则在现有SQL查询语句的最后增加注解@order,用于注解需要扩展的排序条件的位置以及需要扩展的排序方式和现有SQL查询语句中的排序方式之间的关系。
3.根据权利要求2所述的方法,其特征在于,
所述注解@where的条件参数包括:and、or和no中的一种,
如果条件参数为and,则表示需要扩展的查询条件和现有SQL查询语句的查询条件之间是并且的关系;
如果条件参数为or,则表示需要扩展的查询条件和现有SQL查询语句的查询条件之间是或者的关系;
如果条件参数为no,则表示现有SQL查询语句中没有查询条件。
4.根据权利要求2所述的方法,其特征在于,
所述注解@order的排序参数包括:order by之后的排序字段和no中的一种,
如果所述排序参数为order by之后的排序字段,则表示现有SQL查询语句包括排序字段;
如果所述排序参数为no,则表示现有SQL查询语句中没有排序字段。
5.一种基于注解对SQL查询语句进行动态扩展的系统,其特征在于,所述系统包括:
获取单元,用于获取现有SQL查询语句和所述现有SQL查询语句所要应用的一个或多个场景;
结构确定单元,用于对所述一个或多个场景进行解析,确定所述现有SQL查询语句的结构;
注解配置单元,用于根据注解的添加规则并且按照所述现有SQL查询语句的结构,对所述现有SQL查询语句的注解进行配置,获取注解后的SQL查询语句;
解析单元,用于对所述注解后的SQL查询语句的注解参数进行解析,获取已经查询的相关列信息、关联的数据库表信息、查询条件和排序方式;
扩展单元,用于根据所述已经查询的相关列信息、关联的数据库表信息、查询条件和排序方式利用扩展规则对注解后的SQL查询语句进行动态扩展;
其中,所述扩展规则包括:
如果对查询字段进行扩展,则将注解@field替换为扩展的查询字段语句,其中查询字段的扩展格式为:“,表的别名.字段名称字段名称的别名”,其中,若字段名称的别名不存在,则为空;
如果对查询条件进行扩展,则
当现有SQL查询语句中存在where查询条件时,将注解@where替换为扩展的查询条件语句,其中查询条件的扩展格式为:“and/or表的别名.字段名称=“字段值””;
当现有SQL查询语句中不存在where查询条件时,将注解@where替换为扩展的查询条件语句,其中查询件的扩展格式为:“where表的别名.字段名称=“字段值””;
如果对排序字段进行扩展,则
当现有SQL查询语句中存在order by排序方式时,将原排序条件语句以及注解@order替换为新的排序条件语句;
当现有SQL查询语句中不存在order by排序方式时,将注解@order替换为新的排序条件语句;
其中所述排序条件语句的扩展格式为:“order by排序的字段名称排序的方式”;
如果对关联的业务表进行扩展,则将注解@table替换为扩展的关联的业务表语句,其中所述扩展的关联的业务表语句的扩展格式为:“关联方式关联的业务表名关联的业务表别名on原业务表表名.原业务表的主键=关联的业务表表名.关联的业务表的主键”。
6.根据权利要求5所述的系统,其特征在于,所述注解添加规则包括:
在现有SQL查询语句的from之前的位置增加注解@field,用于注解现有SQL查询语句已经设置的查询字段,其中多个查询字段之间用逗号间隔;
在现有SQL查询语句的所有关联表之后,where条件之前的位置增加注解@table,用于注解现有SQL查询语句中已经关联的数据库表和对应的别名,其中多个数据库表之间用逗号间隔;
如果现有SQL查询语句有查询条件,则在现有SQL查询语句的原查询条件之后增加注解@where,如果现有SQL查询语句没有查询条件,则在注解@table之后增加注解@where,用于注解需要扩展的查询条件的位置以及需要扩展的查询条件和现有SQL查询语句中的查询条件之间的关系;
如果现有SQL查询语句有排序方式,则在现有SQL查询语句的排序之后增加注解@order,如果现有SQL查询语句没有排序方式,则在现有SQL查询语句的最后增加注解@order,用于注解需要扩展的排序条件的位置以及需要扩展的排序方式和现有SQL查询语句中的排序方式之间的关系。
7.根据权利要求6所述的系统,其特征在于,
所述注解@where的条件参数包括:and、or和no中的一种,
如果条件参数为and,则表示需要扩展的查询条件和现有SQL查询语句的查询条件之间是并且的关系;
如果条件参数为or,则表示需要扩展的查询条件和现有SQL查询语句的查询条件之间是或者的关系;
如果条件参数为no,则表示现有SQL查询语句中没有查询条件。
8.根据权利要求6所述的系统,其特征在于,
所述注解@order的排序参数包括:order by之后的排序字段和no中的一种,
如果所述排序参数为order by之后的排序字段,则表示现有SQL查询语句包括排序字段;
如果所述排序参数为no,则表示现有SQL查询语句中没有排序字段。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710966660.9A CN110019335B (zh) | 2017-10-17 | 2017-10-17 | 一种基于注解对sql查询语句进行动态扩展的方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710966660.9A CN110019335B (zh) | 2017-10-17 | 2017-10-17 | 一种基于注解对sql查询语句进行动态扩展的方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110019335A CN110019335A (zh) | 2019-07-16 |
CN110019335B true CN110019335B (zh) | 2021-05-28 |
Family
ID=67186589
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710966660.9A Active CN110019335B (zh) | 2017-10-17 | 2017-10-17 | 一种基于注解对sql查询语句进行动态扩展的方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110019335B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111241130B (zh) * | 2019-12-29 | 2024-05-28 | 航天信息股份有限公司 | 一种基于sql语言的语法语句的扩展方法及系统 |
CN111241065B (zh) * | 2020-01-13 | 2024-01-30 | 大汉软件股份有限公司 | 一种支持国产数据库的数据库适配开发与操作方法 |
CN111611241A (zh) * | 2020-04-29 | 2020-09-01 | 平安科技(深圳)有限公司 | 一种字典数据操作方法、装置、可读存储介质及终端设备 |
CN111782195B (zh) * | 2020-06-30 | 2024-05-03 | 广州云徙科技有限公司 | 一种基于在请求参数上添加注解拼接成sql的查询方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104679792A (zh) * | 2013-12-03 | 2015-06-03 | 航天信息软件技术有限公司 | 一种数据权限的实现方法 |
CN104714974A (zh) * | 2013-12-17 | 2015-06-17 | 航天信息股份有限公司 | 一种查询语句解析与再处理的方法和装置 |
CN104714973A (zh) * | 2013-12-17 | 2015-06-17 | 航天信息股份有限公司 | 一种处理查询语句的方法和装置 |
CN105787044A (zh) * | 2016-02-26 | 2016-07-20 | 广州品唯软件有限公司 | 一种基于MySQL的SQL解析器及其解析方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7996416B2 (en) * | 2007-08-31 | 2011-08-09 | Red Hat, Inc. | Parameter type prediction in object relational mapping |
CN101788992A (zh) * | 2009-05-06 | 2010-07-28 | 厦门东南融通系统工程有限公司 | 一种数据库查询语句的转换方法和转换系统 |
-
2017
- 2017-10-17 CN CN201710966660.9A patent/CN110019335B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104679792A (zh) * | 2013-12-03 | 2015-06-03 | 航天信息软件技术有限公司 | 一种数据权限的实现方法 |
CN104714974A (zh) * | 2013-12-17 | 2015-06-17 | 航天信息股份有限公司 | 一种查询语句解析与再处理的方法和装置 |
CN104714973A (zh) * | 2013-12-17 | 2015-06-17 | 航天信息股份有限公司 | 一种处理查询语句的方法和装置 |
CN105787044A (zh) * | 2016-02-26 | 2016-07-20 | 广州品唯软件有限公司 | 一种基于MySQL的SQL解析器及其解析方法 |
Also Published As
Publication number | Publication date |
---|---|
CN110019335A (zh) | 2019-07-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110019335B (zh) | 一种基于注解对sql查询语句进行动态扩展的方法及系统 | |
US8793468B2 (en) | Translation map simplification | |
US11308031B2 (en) | Resolving in-memory foreign keys in transmitted data packets from single-parent hierarchies | |
US9141727B2 (en) | Information search device, information search method, computer program, and data structure | |
US20100192140A1 (en) | Method for presenting candidate for link target to component in web application, as well as computer program and computer system for the same | |
WO2013036688A2 (en) | Identifying product variants | |
US20060218163A1 (en) | Rapid prototyping database | |
CN111008020B (zh) | 将逻辑表达式解析为通用查询语句的方法 | |
CN106940721B (zh) | 一种自定义选择框的数据处理方法及系统 | |
US20100251227A1 (en) | Binary resource format and compiler | |
CN109710631A (zh) | 辅助生成sql代码的方法、装置、设备及计算机存储介质 | |
CN107870915A (zh) | 对搜索结果的指示 | |
US20070245294A1 (en) | Design supporting system, design supporting method, and computer-readable recording medium recorded with design supporting program | |
JP2012064129A (ja) | 複数アプリケーションのgui統合方法 | |
US7844601B2 (en) | Quality of service feedback for technology-neutral data reporting | |
CN113010154A (zh) | 基于动态加载的二级数据管理界面可视化开发配置方法 | |
CN107153615A (zh) | 软件测试的方法及系统、服务终端 | |
CN101697170B (zh) | 一种动态选择数据库的方法和装置 | |
JP2008269515A (ja) | パラメータによる画面レイアウト動的生成方法 | |
GB2509853A (en) | Method for generating workflow from business specification; program; and system | |
US20140081910A1 (en) | Method and apparatus for document updating | |
US7469376B2 (en) | System and method for compiling documents and tracking technology changes in a semiconductor manufacturing environment using a document generation engine | |
CN114546220A (zh) | 页面配置方法及装置、存储介质、计算机设备 | |
CN114116712A (zh) | 扩展字段处理方法、装置、电子设备及存储介质 | |
CN113779362A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |