一种基于注解的数据查询方法、数据查询设备及存储介质与流程

文档序号:19674301发布日期:2020-01-10 23:05阅读:153来源:国知局
一种基于注解的数据查询方法、数据查询设备及存储介质与流程

本发明涉及数据中心技术领域,特别是涉及一种基于注解的数据查询方法、数据查询设备及存储介质。



背景技术:

数据库是管理系统中的重要组成部分,管理人员对于数据库的操作一般有增删改查四种,其中查询操作的占比通常在70%左右,是整个管理系统中最为重要的服务之一。

在一个管理系统初步确定后,要想在此基础上提供更多样化的查询服务,通常的实现方式是:在表单中增加一个输入项,后端代码获取所述输入项中的值,然后根据所获取的值动态的组装sql(structuredquerylanguage,结构化查询语言),最终执行语句以获取数据集。其中,在表单增加输入项的操作基本是无法避免的,但由于改动难度并不大,因此,该部分操作可以忽略不计。但后端代码则不同,需要大量的逻辑判断及sql组装,一旦查询条件较多,就容易因存在大量的if/else语句,导致系统维护困难。

因此,现有技术还有待改进。



技术实现要素:

基于此,有必要针对上述技术问题,提供一种基于注解的数据查询方法、数据查询设备及存储介质,旨在解决现有技术中在管理系统中增加查询服务需要使用大量的逻辑判断及sql组装,导致系统维护困难的问题。

本发明的技术方案如下:

一种基于注解的数据查询方法,其包括:

获取vo对象的get方法列表;

遍历所述get方法列表,并执行get方法得到该get方法列表中的值;

判断所得到的值是否为空,若不为空则继续判断该值是否使用了@where注解;若该值使用了@where注解,则继续判断所述@where注解后是否设置有属性,若否则该值所对应的查询请求为等值查询,若是则该值所对应的查询请求为非等值查询;

当判断为等值查询时,通过java反射获取get方法的返回值,并根据所述返回值进行sql查询语句的动态组装;

当判断为非等值查询时,将查询语句中的@where注解后属性中的问号替换为所获取的值,并在处理in查询条件及like查询条件后进行sql拼接;

根据动态组装后的sql查询语句或拼接后的sql查询语句进行数据查询。

在进一步地优选方案中,进行sql查询语句的动态组装的过程具体为:获取@colume注解的name属性的值,作为sql查询语句的左部,并通过java反射获取get方法的返回值,作为sql查询语句的右部。

在进一步地优选方案中,所述获取@colume注解的name属性的值,作为sql查询语句的左部,并通过java反射获取get方法的返回值,作为sql查询语句的右部的步骤还包括:根据所获取返回值的类型,确定sql查询语句的右部是否需用单引号括起来。

在进一步地优选方案中,所述非等值查询包括:不等值查询,所述不等值查询的查询语句中的@where注解后附加有sql属性。

在进一步地优选方案中,所述非等值查询包括:直接in查询,所述直接in查询的查询语句中的@where注解后附加有isarraystring属性。

在进一步地优选方案中,所述非等值查询包括:间接in查询,所述间接in查询的查询语句中的@where注解后附加有逻辑查询注解。

在进一步地优选方案中,所述非等值查询包括:单逻辑映射查询,所述单逻辑映射查询的查询语句将被转换成一个sql片段,用于后续的拼接处理。

在进一步地优选方案中,所述非等值查询包括:多逻辑映射查询,所述多逻辑映射查询的查询语句将根据前端条件值,选择使用多个逻辑中的一个进行查询,并被转换成一个条件sql片段,用于后续的拼接处理。

一种数据查询设备,其包括有存储器,以及一个或者一个以上的程序,其中一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器执行所述一个或者一个以上程序包含用于执行如上所述的方法。

一种存储介质,其上存储有计算机程序,其中,所述计算机程序被处理器执行时实现如上任一项所述的基于注解的数据查询方法的步骤。

与现有技术相比,本发明提供的基于注解的数据查询方法,包括步骤:获取vo对象的get方法列表;遍历所述get方法列表,并执行get方法得到该get方法列表中的值;判断所得到的值是否为空,若不为空则继续判断该值是否使用了@where注解;若该值使用了@where注解,则继续判断所述@where注解后是否设置有属性,若否则该值所对应的查询请求为等值查询,若是则该值所对应的查询请求为非等值查询;当判断为等值查询时,通过java反射获取get方法的返回值,并根据所述返回值进行sql查询语句的动态组装;当判断为非等值查询时,将查询语句中的@where注解后属性中的问号替换为所获取的值,并在处理in查询条件及like查询条件后进行sql拼接;根据动态组装后的sql查询语句或拼接后的sql查询语句进行数据查询。基于此,本发明所提供的基于注解的数据查询方法,通过将关键的查询条件以注解的方式进行声明,在统一查询接口中,通过java反射将注解信息和vo对象信息提取出来并组装成sql查询语句进行查询,实现了条件的动态组装,使得开发人员在处理查询逻辑时,能够专注于当前条件的逻辑,不会与其他的查询逻辑耦合在一起,降低了开发及维护难度。

附图说明

图1是本发明优选实施例中基于注解的数据查询方法的流程图。

图2是本发明优选实施例中数据查询设备的功能原理框图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

现有技术通过在后端代码获取输入项的值,然后根据值动态组装sql查询语句,最后执行该sql查询语句进行查询的方式,需要使用if/else语句。查询条件较多,则相应的后端代码中if/else语句就较多,如下方代码所示:

对于开发人员而言,不仅开发难度较大,而且后期维护难度亦较大。

本发明提供了一种基于注解的数据查询方法,如图1所示,其包括步骤:

s100、获取vo对象的get方法列表。

s200、遍历所述get方法列表,并执行get方法得到该get方法列表中的值。

s300、判断所得到的值是否为空,若不为空则继续判断该值是否使用了@where注解,若未使用@where注解则进行下一个值的判断。

若某一个值为空,说明用户并未在该值对应的输入栏输入查询条件,则该值不作处理,亦不记入查询条件;若该值非vo列表中的最后一个值,则继续进行下一个值的获取;若该值为vo列表中的最后一个值,则继续进行下一步。

通过分析业务中出现的查询场景,本发明将查询分为简单查询和复杂查询,通过@where注解之后是否设置有属性即可判断是简单查询(即等值查询),还是复杂查询(除等值查询外,其余查询请求皆被视为复杂查询)。

也就是说,若该值使用了@where注解且未设置任何属性,则该值所对应的查询请求为等值查询;若该值使用了@where注解且设置有属性,则该值所对应的查询请求为非等值查询。

简单查询:即等值查询,一般的形式为:field='value'。

复杂查询:等值查询以外的查询都被定义为复杂查询。一般有可能出现的查询类型有:field>'v1'、fieldlike'%value%'、fieldin('v1','v2')等等。

s400、当判断为等值查询时,通过java反射获取get方法的返回值,并根据所述返回值进行sql查询语句的动态组装。

优选地,所述进行sql查询语句的动态组装的过程具体为:获取@colume注解(或者具有同样功能的其他注解,又或者直接在@wherer注解后面再增加一个属性)的name属性的值,作为sql查询语句的左部,并通过java反射获取get方法的返回值,作为sql查询语句的右部。

进一步地,所述获取@colume注解的name属性的值,作为sql查询语句的左部,并通过java反射获取get方法的返回值,作为sql查询语句的右部的步骤还包括:根据所获取返回值的类型,确定sql查询语句的右部是否需用单引号括起来。

对于简单查询,在开发时,本发明直接提供了一个@where注解,vo中的某个字段如果需要作为条件使用,本发明会在其get方法上添加@where声明,如下示例代码所示(具体请看下述代码第5行):

假设get()返回值为张三,则最终通过本发明处理得到的sql片段即为:userid='张三'。

s500、当判断为非等值查询时,将查询语句中的@where注解后属性中的问号替换为所获取的值,并在处理in查询条件及like查询条件后进行sql拼接。

对于复杂查询的处理,光有@where注解显然是不够的,本发明还通过注解标识加属性的方式来实现,注解的关键属性有sql、isarraystring、islike等,表达式如下:@where(sql="",isarraystring="",islike="")。

作为本发明地优选实施例,所述非等值查询包括:不等值查询(专门处理like,>,!>,<,!<操作符逻辑),所述不等值查询的查询语句中的@where注解后附加有sql属性(具体地说,至少分为两种情况:1、大于小于或者不等于号连接的sql:例如field>'v1',该语句只需要配置sql属性;2、like语句,需要搭配islike属性,指定是何种匹配模式,需要配置sql属性及islike属性),第二种情况示例代码如下:

可以看到,其中的like逻辑增加有一个islike属性,以便标识是何种匹配(分为:完全匹配、左侧匹配、右侧匹配及模糊匹配),上述代码中的11表示模糊匹配。

优选所述非等值查询包括:直接in查询,所述直接in查询的查询语句中的@where注解后附加有isarraystring属性,示例代码如下:

@where(sql="typein?",isarraystring="")

publiclist<string>gettype(){

}

其中的isarraystring是为了处理前后端传参类型不一致的情况,用于显示的表明值字段是否需要使用单引号括起来。

优选所述非等值查询包括:间接in查询,所述间接in查询的查询语句中的@where注解后附加有逻辑查询注解,示例代码如下:

此类情况,in的范围一般不来自于前端的条件选择,而是直接通过逻辑查询得到。上例是“查询指定部门员工的请假条”的注解。

优选所述非等值查询包括:单逻辑映射查询,所述单逻辑映射查询的查询语句将被转换成一个sql片段,用于后续的拼接处理,示例代码如下:

@where(sql="(useridlike?ornamelike?)",islike="11")

publicstringgetkeyword(){

}

上例表示,根据关键字查询用户,关键字可以匹配用户名或者用户姓名。

优选所述非等值查询包括:多逻辑映射查询,所述多逻辑映射查询的查询语句将根据前端条件值,选择使用多个逻辑中的一个进行查询,并被转换成一个条件sql片段,用于后续的拼接处理,示例代码如下:

上例表示,根据前端选择条件是/否,查询是否有员工照片的员工信息列表。其中?=1表示有。

复杂查询中,如果注解的sql属性所表示的sql片段中有?,在统一查询接口中会进行值替换,然后得到一个可以作为条件sql片段,跟其他片段连接。

s600、根据动态组装后的sql查询语句或拼接后的sql查询语句进行数据查询。

此外,本发明还提供了排序注解(是一种辅助性注解),通过排序注解,可以将一个字段声明为aes或者desc排序方式。

通过注解的方式来操作数据库查询,可以使得开发人员在处理查询逻辑时,能专注于当前条件的逻辑,不会跟其他的查询逻辑耦合在一起,在降低开发难度的同时,也提高了可维护性。

综上,本发明技术方案的核心在于:通过自定义的注解,建立查询逻辑和vo对象属性值的关联关系,通过统一的查询接口,自动的解析对象和注解信息,通过各种情况的判断,将对象的属性值和注解信息值组合成一个个的sql条件片段,实现查询条件的自动解析,自动组装,使得开发更加简单,维护更加方便,提高了开发效率,降低了维护难度。

如图2所示,本发明还提供了一种数据查询设备,其包括有存储器10,以及一个或者一个以上的程序,其中一个或者一个以上程序存储于存储器10中,且经配置以由一个或者一个以上处理器20执行所述一个或者一个以上程序包含用于执行如上所述的基于注解的数据查询方法。

本发明还提供了一种存储介质,其上存储有计算机程序,其中,所述计算机程序被处理器执行时实现如上所述的基于注解的数据查询方法的步骤。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本发明所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双数据率sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。

以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1