一种可配置的动态SQL查询方法技术

技术编号:39300445 阅读:8 留言:0更新日期:2023-11-12 15:51
本发明专利技术提供了一种可配置的动态SQL查询方法,包括:解析SQL,获取对应的标签集合;根据标签集合,判断标签类型;根据标签类型,处理子SQL。基于本发明专利技术的可配置的动态SQL查询方法,实现不依赖于ORM框架,使用JDBC直连,降低对代码的侵入性。支持界面配置动态SQL,更加灵活。语法兼容Mybatis,减少数据实施人员学习成本。减少数据实施人员学习成本。减少数据实施人员学习成本。

【技术实现步骤摘要】
一种可配置的动态SQL查询方法


[0001]本专利技术属于云服务
,尤其是涉及一种可配置的动态SQL查询方法。

技术介绍

[0002]在数据中台建设的过程中,计算好的数据是以API的形式提供服务,而数据API在提供服务时需要指定相应的数据模型并且数据模型需要支持关系型SQL,这意味着数据实施人员在数据平台操作页面进行API发布时,需要配置好预定的SQL,并按照一定的规则,使用占位符将参数预留出来,在服务订阅者通过API调用数据服务时,传入对应的参数,数据服务根据配置的SQL,将参数进行替换并执行,返回对应的结果集。在这个过程中,SQL需要支持动态拼接,当参数为空时不进行SQL拼接。比如SQL语句为:SELECT*FROM TABLE WEHRE CODE=${code}AND NANE=${name},其中code、name为可传参数,当name为空时,SQL应为SELECT*FROM TABLE WEHRE CODE=${code},但目前缺少较为有效的SQL拼接解析过程,在使用时具有较大的局限性。

技术实现思路

[0003]有鉴于此,为克服上述缺陷,本专利技术旨在提出一种可配置的动态SQL查询方法。
[0004]为达到上述目的,本专利技术的技术方案是这样实现的:
[0005]第一方面,本专利技术提供了一种可配置的动态SQL查询方法,包括:
[0006]解析SQL,获取对应的标签集合;
[0007]根据标签集合,判断标签类型;
[0008]根据标签类型,处理子SQL。
[0009]进一步的,所述根据标签类型,处理SQL内容,包括:
[0010]替换SQL可变参数,返回完整的SQL,基于完整的SQL,获取数据源,执行SQL。
[0011]进一步的,所述解析SQL,获取对应的标签集合,包括:
[0012]解析SQL时将动态SQL前后增加<root></root>根标签;使用dom4j解析标签,获取到所有的子标签。
[0013]进一步的,所述根据标签类型,处理子SQL,包括:
[0014]递归解析所有子标签内容及OGNL表达式,将解析完成后的内容记录下来。
[0015]第二方面,本专利技术提供了一种电子设备/服务器,包括处理器,以及与处理器通信连接,且用于存储所述处理器可执行指令的存储器,所述处理器在执行所述指令时,实现上述第一方面所述的可配置的动态SQL查询方法。
[0016]第三方面,本专利技术提供了一种可读取存储介质,用于存储计算机程序,所述计算机程序在被处理器执行时,实现上述第一方面所述的可配置的动态SQL查询方法。
[0017]相对于现有技术,本专利技术所述的可配置的动态SQL查询方法具有以下优势:
[0018]基于本专利技术的可配置的动态SQL查询方法,实现不依赖于ORM框架,使用JDBC直连,降低对代码的侵入性。支持界面配置动态SQL,更加灵活。语法兼容Mybatis,减少数据实施
人员学习成本。
附图说明
[0019]构成本专利技术的一部分的附图用来提供对本专利技术的进一步理解,本专利技术的示意性实施例及其说明用于解释本专利技术,并不构成对本专利技术的不当限定。在附图中:
[0020]图1为本专利技术所述的可配置的动态SQL查询方法流程图。
具体实施方式
[0021]需要说明的是,在不冲突的情况下,本专利技术中的实施例及实施例中的特征可以相互组合。
[0022]下面将参考附图并结合实施例来详细说明本专利技术。
[0023]本实施例提供了一种可配置的动态SQL查询方法,如图1所示,具体步骤包括:
[0024]解析SQL,获取对应的标签集合;
[0025]根据标签集合,判断标签类型;
[0026]根据标签类型,处理子SQL。
[0027]其中,所述根据标签类型,处理SQL内容,包括:
[0028]替换SQL可变参数,返回完整的SQL,基于完整的SQL,获取数据源,执行SQL。
[0029]其中,所述解析SQL,获取对应的标签集合,包括:
[0030]解析SQL时将动态SQL前后增加<root></root>根标签;使用dom4j解析标签,获取到所有的子标签。
[0031]其中,所述根据标签类型,处理子SQL,包括:
[0032]递归解析所有子标签内容及OGNL表达式,将解析完成后的内容记录下来。
[0033]本实施例的具体执行方法为:
[0034]1.按照规则配置好动态SQL,具体支持<where><if><trim><foreach>
[0035]等标签,语法使用OGNL表达式
[0036]2.解析SQL时将动态SQL前后增加<root></root>根标签
[0037]3.使用dom4j解析标签,获取到所有的子标签
[0038]4.递归解析所有子标签内容及OGNL表达式,将解析完成后的内容记
[0039]录下来
[0040]5.判断字标签类型:例如动态SQL为SELECT*FROM TABLE
[0041]<where><if test=”code!=null and code!=
‘’”
>AND CODE=
[0042]${code}</if><if test=”name!=null and name!=
‘’”
>AND NAME
[0043]=${name}</if></where>
[0044]5.1<if>标签,读取test内容如进行判断是否拼接SQL,如果为true
[0045]则拼接,false则执行下一个标签
[0046]5.2<where>标签,对于后面紧跟的第一段子SQL,截取掉AND或者OR
[0047]5.3<trim>标签,去除SQL段中多余的AND/OR
[0048]5.4<foreach>标签,解析标签内的open、close、collection、separator、
[0049]item、index等属性,按照语义拼接SQL
[0050]6.替换SQL中的参数,${code}替换为

code

,#{code}替换为code
...

【技术保护点】

【技术特征摘要】
1.一种可配置的动态SQL查询方法,其特征在于,包括:解析SQL,获取对应的标签集合;根据标签集合,判断标签类型;根据标签类型,处理子SQL。2.根据权利要求1所述的可配置的动态SQL查询方法,其特征在于,所述根据标签类型,处理SQL内容,包括:替换SQL可变参数,返回完整的SQL,基于完整的SQL,获取数据源,执行SQL。3.根据权利要求1所述的可配置的动态SQL查询方法,其特征在于,所述解析SQL,获取对应的标签集合,包括:解析SQL时将动态SQL前后增加<root></root>根标签;使用dom4j解析标签,获取到...

【专利技术属性】
技术研发人员:邹虎
申请(专利权)人:紫光云技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1