CN107463662B - 一种动态Sql查询方法、装置 - Google Patents
一种动态Sql查询方法、装置 Download PDFInfo
- Publication number
- CN107463662B CN107463662B CN201710643660.5A CN201710643660A CN107463662B CN 107463662 B CN107463662 B CN 107463662B CN 201710643660 A CN201710643660 A CN 201710643660A CN 107463662 B CN107463662 B CN 107463662B
- Authority
- CN
- China
- Prior art keywords
- query
- sql
- parameter
- value
- null
- 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
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
-
- 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/242—Query formulation
- G06F16/2433—Query languages
-
- 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/25—Integrating or interfacing systems involving database management systems
- G06F16/252—Integrating or interfacing systems involving database management systems between a Database Management System and a front-end application
Abstract
本发明公开了一种动态Sql查询方法、装置,其中方法包括如下步骤:输入查询参数类型、查询参数名以及查询参数的值Sql查询语句,解析所述Sql查询语句构造出Sqltoy配置模型,通过filters转换Sql中查询参数的值,转化为null的判断,得到查询参数实际的值,处理Sql查询语句中的特殊标记,执行最终的Sql查询语句和查询参数实际的值,并通过Java API执行查询返回结果。本发明提升了sql的开发效率、为sql性能优化提供了便利。此外,本发明的方法能够保证项目过程中数据库查询开发效率和开发质量,提升动态查询语句的组织机制。
Description
技术领域
本发明涉及数据库领域、计算机软件领域,特别涉及一种动态Sql查询方法、装置。
背景技术
一般而言,在使用数据库进行管理类项目时需要对数据进行多条件查询和/或统计,而管理类项目又具有需求的多变性,如图1所示,目前而言如何提升需求的相应效率以及开发质量常常是作为项目管理者难以解决的技术问题。此外,项目人员在经常接手一些老项目时,对老项目的理解、维护尤其一些查询逻辑的梳理让人不胜其烦,增加项目人员的重复劳动成本。
可见,现有技术中存在如下的缺陷:
1)如图3所示,打乱了sql语句的原本结构,让开发者无法直观地看清楚sql的逻辑;
2)为开发者带来了更多的工作量,以myBatis为列,需要开发者额外地编写大量的xml判断逻辑,语句冗余;如图2所示,
3)不符合数据库查询的开发模式,即客户端调试-->项目集成调试的这种循环过程,以myBatis为例,会让这种过程变得非常繁琐;
4)一些最为基础的功能都需要额外的插件来实现而不提供默认的实现支持机制,比如分页查询,从而将简单的功能,复杂化、技术化。
发明内容
本发明要解决的技术问题是,一种提升了sql的优雅性和可读性、提升了sql的可维护性的一种动态Sql查询方法。
解决上述技术问题,本发明提供了一种动态Sql查询方法,包括如下步骤:
输入查询参数类型、查询参数名以及查询参数的值Sql查询语句,
解析所述Sql查询语句构造出Sqltoy配置模型,
通过filters转换Sql中查询参数的值,转化为null的判断,得到查询参数实际的值,
处理Sql查询语句中的特殊标记,
执行最终的Sql查询语句和查询参数实际的值,并通过Java API执行查询返回结果。
更进一步,转化为null的判断具体是指将非null的查询参数的值转化为null的判断。
更进一步,所述特殊标记为:#[]标记。
更进一步,Sqltoy配置模型的配置方法为:
去除sql中的注释,
提取sql中的参数名称,
匹配出参数名称,获取参数对应的值。
更进一步,若查询参数的值符合filter条件,则置为null。
更进一步,查询参数的值判断为null,则相应的#[]部分去除。
更进一步,所述Java API为JDBC。
更进一步,处理Sql查询语句中的特殊标记时,若查询参数的值为null,则不包含该部分的查询语句。
基于上述,本发明还提供过了一种动态Sql查询装置,包括:输入单元、解析单元、过滤单元、处理单元、结果输出单元,
所述输入单元,用以输入查询参数类型、查询参数名以及查询参数的值Sql查询语句,
所述解析单元,用以解析所述Sql查询语句构造出Sqltoy配置模型,
所述过滤单元,用以通过filters转换Sql中查询参数的值,转化为null的判断,得到查询参数实际的值,
所述处理单元,用以处理Sql查询语句中的特殊标记,
所述结果输出单元,用以执行最终的Sql查询语句和查询参数实际的值,并通过Java API执行查询返回结果。
更进一步,所述解析单元中Sqltoy配置模型的配置方法为:
去除sql中的注释,
提取sql中的参数名称,
匹配出参数名称,获取参数对应的值。
本发明的有益效果:
本发明的一种动态Sql查询方法能够保证项目过程中数据库查询开发效率和开发质量,提升动态查询语句的组织机制,让sql语句具有较强的可读性和可维护性,同时保持功能的健壮性。大提升了sql的开发效率,也为sql性能优化提供了便利。
附图说明
图1是现有技术中的数据查询应用场景伪代码结构示意图;
图2是现有技术中myBatis的伪代码结构示意图;
图3是现有技术中JAVA代码中的逻辑拼接的伪代码结构示意图;
图4是本发明中的方法流程示意图;
图5是图4中的具体实施方式示意图;
图6是本发明中的装置结构示意图;
图7是处理后的sql查询语句伪代码结构示意图。
具体实施方式
现在将参考一些示例实施例描述本公开的原理。可以理解,这些实施例仅出于说明并且帮助本领域的技术人员理解和实施例本公开的目的而描述,而非建议对本公开的范围的任何限制。在此描述的本公开的内容可以以下文描述的方式之外的各种方式实施。
如本文中所述,术语“包括”及其各种变体可以被理解为开放式术语,其意味着“包括但不限于”。术语“基于”可以被理解为“至少部分地基于”。术语“一个实施例”可以被理解为“至少一个实施例”。术语“另一实施例”可以被理解为“至少一个其它实施例”。
如图4所示是本发明中的方法流程示意图,本实施例中的一种动态Sql查询方法,包括如下步骤:
步骤S1输入查询参数类型、查询参数名以及查询参数的值Sql查询语句,
步骤S2解析所述Sql查询语句构造出Sqltoy配置模型,Sqltoy通过#[]标记结合filters处理,让sql保持原生态的优雅直观。Sqltoy配置模型的配置方法为:
去除sql中的注释,
提取sql中的参数名称,
匹配出参数名称,获取参数对应的值。
步骤S3通过filters转换Sql中查询参数的值,转化为null的判断,得到查询参数实际的值,Filters目的转换sql中查询参数的值,负责转换为null或格式转换。转化为null的判断具体是指将非null的查询参数的值转化为null的判断。在一些实施例中,若查询参数的值符合filter条件,则置为null。
步骤S4处理Sql查询语句中的特殊标记,所述特殊标记为:#[]标记。在一些实施例中,查询参数的值判断为null,则相应的#[]部分去除。优选地,若处理Sql查询语句中的特殊标记时,若查询参数的值为null,则不包含该部分的查询语句。
步骤S5执行最终的Sql查询语句和查询参数实际的值,并通过Java API执行查询返回结果。在一些实施例中,所述Java API为JDBC。
本实施例中充分利用的传统关系型数据库查询的最根本的特性:条件存在的基本特性基于是否为null作为直接或间接的前提。间接前提即:非null的其实也都可以转化为null的判断,此外结合这个规律利用一些额外的filters处理逻辑,将sql查询语句保留原生态的结构和优雅,大幅度的提升了sql语句的可读性和可维护性。
如图5所示是图4中的具体实施方式示意图。
首先,输入查询参数类型、查询参数名以及查询参数的值Sql查询语句,比如,使用Find(String sql,string[]paramNames;Object[]paramValues)的方式发起请求;
其次,解析所述Sql查询语句构造出Sqltoy配置模型,Sqltoy通过#[]标记结合filters处理,让sql保持原生态的优雅直观。具体而言,Sqltoy配置模型的配置方法为:
去除sql中的注释,
提取sql中的参数名称,
匹配出参数名称,获取参数对应的值。
然后,通过filters转换Sql中查询参数的值,转化为null的判断,得到查询参数实际的值,即处理filters中定义的逻辑,确定查询参数的实际值,比如,<quals params="sex Type"value="-1"">,
如图7所示,当sex Type为-1,则将sex Type置为null。
如图7所示,Date、endData都为null,相应的#[t.create_date>=xxx]部分去除。
再次,处理Sql查询语句中的特殊标记#[]标记,比如[and SEX_TYPE=:sexTYPE],其逻辑等于:if(sexType!=null){sql.append("and SEX_TYPE=:sexTYPE"}。如果sexType为null,则不包含这部分查询语句。
最后,执行最终的Sql查询语句和查询参数实际的值,并通过Java API执行查询返回结果。
请参考图6,本实施例中的一种动态Sql查询装置,包括:输入单元1、解析单元2、过滤单元3、处理单元4、结果输出单元5,
所述输入单元1,用以输入查询参数类型、查询参数名以及查询参数的值Sql查询语句,
所述解析单元2,用以解析所述Sql查询语句构造出Sqltoy配置模型,
所述过滤单元3,用以通过filters转换Sql中查询参数的值,转化为null的判断,得到查询参数实际的值,
所述处理单元4,用以处理Sql查询语句中的特殊标记,
所述结果输出单元5,用以执行最终的Sql查询语句和查询参数实际的值,并通过Java API执行查询返回结果。
作为本实施例中的优选,所述解析单元2中Sqltoy配置模型的配置方法为:
去除sql中的注释,
提取sql中的参数名称,
匹配出参数名称,获取参数对应的值。
应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
总体而言,本公开的各种实施例可以以硬件或专用电路、软件、逻辑或其任意组合实施。一些方面可以以硬件实施,而其它一些方面可以以固件或软件实施,该固件或软件可以由控制器、微处理器或其它计算设备执行。虽然本公开的各种方面被示出和描述为框图、流程图或使用其它一些绘图表示,但是可以理解本文描述的框、设备、系统、技术或方法可以以非限制性的方式以硬件、软件、固件、专用电路或逻辑、通用硬件或控制器或其它计算设备或其一些组合实施。
此外,虽然操作以特定顺序描述,但是这不应被理解为要求这类操作以所示的顺序执行或是以顺序序列执行,或是要求所有所示的操作被执行以实现期望结果。在一些情形下,多任务或并行处理可以是有利的。类似地,虽然若干具体实现方式的细节在上面的讨论中被包含,但是这些不应被解释为对本公开的范围的任何限制,而是特征的描述仅是针对具体实施例。在分离的一些实施例中描述的某些特征也可以在单个实施例中组合地执行。相反对,在单个实施例中描述的各种特征也可以在多个实施例中分离地实施或是以任何合适的子组合的方式实施。
Claims (6)
1.一种动态Sql查询方法,其特征在于,包括如下步骤:
输入查询参数类型、查询参数名以及查询参数的值Sql查询语句,
解析所述Sql查询语句构造出Sqltoy配置模型,其中,所述Sqltoy配置模型的配置方法为:去除sql中的注释,提取sql中的参数名称,匹配出参数名称,获取参数对应的值,
通过filters转换Sql中查询参数的值,转化为null的判断,得到查询参数实际的值,其中,转化为null的判断具体是指将非null的查询参数的值转化为null的判断,
处理Sql查询语句中的特殊标记,其中,所述特殊标记为:#[]标记,
执行最终的Sql查询语句和查询参数实际的值,并通过Java API执行查询返回结果。
2.根据权利要求1所述的动态Sql查询方法,其特征在于,查询参数的值判断为null,则相应的#[]部分去除。
3.根据权利要求1所述的动态Sql查询方法,其特征在于,若查询参数的值符合filter条件,则置为null。
4.根据权利要求1所述的动态Sql查询方法,其特征在于,所述Java API为JDBC。
5.根据权利要求1所述的动态Sql查询方法,其特征在于,处理Sql查询语句中的特殊标记时,若查询参数的值为null,则不包含该部分的查询语句。
6.一种动态Sql查询装置,其特征在于,包括:输入单元、解析单元、过滤单元、处理单元、结果输出单元,
所述输入单元,用以输入查询参数类型、查询参数名以及查询参数的值Sql查询语句,
所述解析单元,用以解析所述Sql查询语句构造出Sqltoy配置模型,其中,所述解析单元中Sqltoy配置模型的配置方法为:去除sql中的注释,提取sql中的参数名称,匹配出参数名称,获取参数对应的值,
所述过滤单元,用以通过filters转换Sql中查询参数的值,转化为null的判断,得到查询参数实际的值,其中,转化为null的判断具体是指将非null的查询参数的值转化为null的判断,
所述处理单元,用以处理Sql查询语句中的特殊标记,其中,所述特殊标记为:#[]标记,
所述结果输出单元,用以执行最终的Sql查询语句和查询参数实际的值,并通过JavaAPI执行查询返回结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710643660.5A CN107463662B (zh) | 2017-07-31 | 2017-07-31 | 一种动态Sql查询方法、装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710643660.5A CN107463662B (zh) | 2017-07-31 | 2017-07-31 | 一种动态Sql查询方法、装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107463662A CN107463662A (zh) | 2017-12-12 |
CN107463662B true CN107463662B (zh) | 2019-12-10 |
Family
ID=60547819
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710643660.5A Active CN107463662B (zh) | 2017-07-31 | 2017-07-31 | 一种动态Sql查询方法、装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107463662B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109558427A (zh) * | 2018-11-30 | 2019-04-02 | 上海找钢网信息科技股份有限公司 | 基于钢铁产业数据平台的智能查询系统及方法 |
CN111241130A (zh) * | 2019-12-29 | 2020-06-05 | 航天信息股份有限公司 | 一种基于sql语言的语法语句的扩展方法及系统 |
CN112749222B (zh) * | 2021-01-18 | 2024-03-19 | 北京睿企信息科技有限公司 | 一种支持动态参数的关系型数据库查询方法和装置 |
CN112988801A (zh) * | 2021-04-07 | 2021-06-18 | 拉卡拉支付股份有限公司 | 数据处理方法、装置、电子设备、存储介质及程序产品 |
CN114968405A (zh) * | 2022-05-25 | 2022-08-30 | 山东国子软件股份有限公司 | 一种自定义工作流引擎配置系统及方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103207908A (zh) * | 2013-03-29 | 2013-07-17 | 成都康赛电子科大信息技术有限责任公司 | 多数据源动态隔离访问方法 |
CN103279509A (zh) * | 2013-05-17 | 2013-09-04 | 北京首钢自动化信息技术有限公司 | 一种采用动态查询语言的快速查询方法 |
CN103744891A (zh) * | 2013-12-23 | 2014-04-23 | 大唐软件技术股份有限公司 | 一种数据查询方法和系统 |
CN103927179A (zh) * | 2014-04-18 | 2014-07-16 | 扬州大学 | 一种基于WordNet的程序可读性分析方法 |
CN104714973A (zh) * | 2013-12-17 | 2015-06-17 | 航天信息股份有限公司 | 一种处理查询语句的方法和装置 |
-
2017
- 2017-07-31 CN CN201710643660.5A patent/CN107463662B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103207908A (zh) * | 2013-03-29 | 2013-07-17 | 成都康赛电子科大信息技术有限责任公司 | 多数据源动态隔离访问方法 |
CN103279509A (zh) * | 2013-05-17 | 2013-09-04 | 北京首钢自动化信息技术有限公司 | 一种采用动态查询语言的快速查询方法 |
CN104714973A (zh) * | 2013-12-17 | 2015-06-17 | 航天信息股份有限公司 | 一种处理查询语句的方法和装置 |
CN103744891A (zh) * | 2013-12-23 | 2014-04-23 | 大唐软件技术股份有限公司 | 一种数据查询方法和系统 |
CN103927179A (zh) * | 2014-04-18 | 2014-07-16 | 扬州大学 | 一种基于WordNet的程序可读性分析方法 |
Non-Patent Citations (1)
Title |
---|
正式开源sqltoy-orm框架;iteye_2252;《https://blog.csdn.net/iteye_2252/article/details/82677617》;20161227;第一页 * |
Also Published As
Publication number | Publication date |
---|---|
CN107463662A (zh) | 2017-12-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107463662B (zh) | 一种动态Sql查询方法、装置 | |
Muniswamaiah et al. | Context-aware query performance optimization for big data analytics in healthcare | |
CN111813963B (zh) | 知识图谱构建方法、装置、电子设备及存储介质 | |
El-Sappagh et al. | A proposed model for data warehouse ETL processes | |
US10102039B2 (en) | Converting a hybrid flow | |
US7254810B2 (en) | Apparatus and method for using database knowledge to optimize a computer program | |
CA2939915C (en) | Managing data profiling operations related to data type | |
US20050102613A1 (en) | Generating a hierarchical plain-text execution plan from a database query | |
US10614126B2 (en) | Textual query editor for graph databases that performs semantic analysis using extracted information | |
US20040225696A1 (en) | On-demand multi-version data dictionary to support distributed applications | |
US20100175049A1 (en) | Scope: a structured computations optimized for parallel execution script language | |
US20070027849A1 (en) | Integrating query-related operators in a programming language | |
US7831614B2 (en) | System and method for generating SQL using templates | |
Mohamed et al. | E-clean: a data cleaning framework for patient data | |
WO2018176822A1 (zh) | 一种操作ElasticSearch的方法及装置 | |
CN116257610B (zh) | 基于行业知识图谱的智能问答方法、装置、设备及介质 | |
CN114036183A (zh) | 一种数据etl处理方法、装置、设备及介质 | |
WO2021253641A1 (zh) | 着色语言翻译方法 | |
CN112286557B (zh) | 一种非覆盖式更新代码内容的方法和装置 | |
CN112597171A (zh) | 表格关系可视化方法、装置、电子设备及存储介质 | |
Alghazali et al. | Development of Intelligent Tools for Detecting Resource-intensive Database Queries | |
CN113221528B (zh) | 基于openEHR模型的临床数据质量评估规则的自动生成与执行方法 | |
US20210263928A1 (en) | System and method of fetching data from an external program | |
US20120254178A1 (en) | System and method for processing an sql query made against a relational database | |
Polig et al. | A hardware compilation framework for text analytics queries |
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 |