CN113392122A - 一种基于Mybatis框架分离及运行HQL的方法 - Google Patents

一种基于Mybatis框架分离及运行HQL的方法 Download PDF

Info

Publication number
CN113392122A
CN113392122A CN202110643320.9A CN202110643320A CN113392122A CN 113392122 A CN113392122 A CN 113392122A CN 202110643320 A CN202110643320 A CN 202110643320A CN 113392122 A CN113392122 A CN 113392122A
Authority
CN
China
Prior art keywords
hql
statement
framework
parameter
mybatis
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
Application number
CN202110643320.9A
Other languages
English (en)
Other versions
CN113392122B (zh
Inventor
张志远
刘伟成
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Tongchuang Yongyi Technology Development Co ltd
Original Assignee
Beijing Tongchuang Yongyi Technology Development Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Tongchuang Yongyi Technology Development Co ltd filed Critical Beijing Tongchuang Yongyi Technology Development Co ltd
Priority to CN202110643320.9A priority Critical patent/CN113392122B/zh
Publication of CN113392122A publication Critical patent/CN113392122A/zh
Application granted granted Critical
Publication of CN113392122B publication Critical patent/CN113392122B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/242Query formulation
    • G06F16/2433Query languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/80Information retrieval; Database structures therefor; File system structures therefor of semi-structured data, e.g. markup language structured data such as SGML, XML or HTML

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Computational Linguistics (AREA)
  • Stored Programmes (AREA)

Abstract

本发明公开了一种基于Mybatis框架分离及运行HQL的方法,包括将要编写的HQL语句,事先按照Mybatis框架XML语法规范写入到xml文件中;每条HQL语句在xml文件中都会有一个唯一的ID,即HQL_ID;在需要某条HQL语句时,使用指定的HQL_ID调用Mybatis框架的API,Mybatis框架通过其内部的xml解析引擎将xml文件中ID为HQL_ID的HQL语句和该HQL语句中所需要的参数名按顺序解析出来;根据参数值映射表将解析出的参数名按照顺序转换为参数值,并依次添加入参数值列表中;将获取的HQL语句和相应的参数值列表作为API参数,调用Hibernate框架的API完成该HQL语句的运行。优点是:避免了直接在源代码中编写HQL语句导致的源代码可读取性下降的问题,同时也避免了对于HQL语句的问题修复需要重新对源代码进行编译、打包、部署的问题。

Description

一种基于Mybatis框架分离及运行HQL的方法
技术领域
本发明涉及java开发技术领域,尤其涉及一种基于Mybatis框架分离及运行HQL的方法。
背景技术
HQL全称为Hibernate Query Language,是Hiberate框架所使用的特有的对象导航模型数据库查询语言。
在使用Hiberante框架时,需要将HQL编写在java源文件(以下简称“源代码”)中,再调用Hibernate的API才可以运行。这样就导致了源代码中存在大量的HQL语句,如果最终的HQL语句还需要根据查询条件的不同而做出不同调整时,源代码中也会出现大量的if-else的分支判断语句,用来拼接出最终的HQL语句(以下简称“动态拼接”)。这大大降低了代码的可读性,导致开发者的注意力会被这些HQL语句分散,不能专心聚焦于业务代码,并随着软件功能的增多,此种情况也会愈发严重,使得开发和维护成本也越来越高。
由于HQL是编写在源代码中的,当HQL语句出现问题需要修复时,则必须修改源代码,然后重新对源代码进行编译、打包、部署才可以完成问题修复。如果在没有源代码的情况下,将很难修复这些问题。
发明内容
本发明的目的在于提供一种基于Mybatis框架分离及运行HQL的方法,从而解决现有技术中存在的前述问题。
为了实现上述目的,本发明采用的技术方案如下:
一种基于Mybatis框架分离及运行HQL的方法,包括如下步骤,
S1、将要编写的HQL语句,事先按照Mybatis框架XML语法规范写入到xml文件中;每条HQL语句在xml文件中都会有一个唯一的ID,即HQL_ID;
S2、在需要某条HQL语句时,使用指定的HQL_ID调用Mybatis框架的API,Mybatis框架通过其内部的xml解析引擎将事先编写在xml文件中ID为HQL_ID的HQL语句和该HQL语句中所需要的参数名按顺序解析出来;
S3、根据参数值映射表将步骤S2中解析出的参数名按照顺序转换为参数值,并将参数值依次添加入参数值列表中;
S4、将获取的HQL语句和相应的参数值列表作为API参数,调用Hibernate框架的API完成该HQL语句的运行。
本发明的有益效果是:1、由于没有直接在源代码中编写HQL语句,仅仅只是使用一个HQL_ID来代替,所以不会存在源代码中出现大量HQL语句及动态拼接的过程的情况,开发者可以更加专注于业务代码的开发和维护。2、由于HQL语句是编写在xml文件中的,而xml文件是不需要进行编译即可使用的,当出现了HQL语句出现问题时,只需要修改xml文件中的HQL语句,重新启动服务既可,不需要进行源代码的重新编译、打包、部署的过程,因此即使在没有源代码的情况下,仍然可以非常方便的修复HQL语句问题。
附图说明
图1是本发明实施例中方法中所涉及的组成架构;
图2是本发明实施例中方法的原理流程图;
图3是本发明实施例中步骤S1的执行代码;
图4是本发明实施例中步骤S2的执行代码;
图5是本发明实施例中步骤S3的执行代码;
图6是本发明实施例中将HQL语句和参数值列表作为API参数的执行代码;
图7是本发明实施例中调用Hibernate的API完成HQL的运行的执行代码;
图8是本发明实施例中传统的直接在源代码中编写HQL的示意图;
图9是本发明实施例中使用本发明方法改进以后的源代码示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施方式仅仅用以解释本发明,并不用于限定本发明。
如图1和图2所示,本实施例中,提供了一种基于Mybatis框架分离及运行HQL的方法,包括如下步骤,
S1、将要编写的HQL语句,事先按照Mybatis框架XML语法规范写入到xml文件中;每条HQL语句在xml文件中都会有一个唯一的ID,即HQL_ID;
S2、在需要某条HQL语句时,使用指定的HQL_ID调用Mybatis框架的API,Mybatis框架通过其内部的xml解析引擎将事先编写在xml文件中ID为HQL_ID的HQL语句和该HQL语句中所需要的参数名按顺序解析出来;
S3、根据参数值映射表将步骤S2中解析出的参数名按照顺序转换为参数值,并将参数值依次添加入参数值列表中;
S4、将获取的HQL语句和相应的参数值列表作为API参数,调用Hibernate框架的API完成该HQL语句的运行。
本实施例中,步骤S2中,对于需要动态拼接的HQL语句,使用Mybatis框架提供的动态SQL功能完成,每条HQL语句在xml文件中都会有一个唯一的ID,即HQL_ID。
本实施例中,本发明提供的方法是基于Mybatis框架所具有的xml文件解析的功能,将其作为HQL语句的存储介质,在使用时将存放于xml文件中的HQL使用Mybatis框架解析出来,通过一定的组装,形成Hibernate框架所需要的HQL语句运行参数,以进行运行。从而避免了直接在源代码中编写HQL语句导致的源代码可读取性下降的问题,同时也避免了对于HQL语句的问题修复需要重新对源代码进行编译、打包、部署的问题。
实施例二
本实施例中,结合具体的操作实例,具体说明本发明提供的方法的执行过程。
场景:根据用户名(username)和年龄(age)和性别(gender)三种属性精确查询用户信息(User),如果某个属性没有值,则不对该属性进行过滤。
1、首先将HQL语句写入xml文件中;如图3所示;
2、调用Mybatis框架的API,将事先编写在xml文件中ID为IUserService.findUser的HQL语句和HQL语句中所需要的参数名按顺序解析出来;如图4所示;
3、根据接收到的参数值映射表将参数名按照顺序转换为参数值,并依次添加入参数值列表;如图5所示;
4、将得到的HQL语句和有顺序的参数值列表作为API参数,调用Hibernate的API完成HQL的运行;如图6和图7所示;
图8和图9为源代码效果对比图,其中,图8为传统的直接在源代码中编写HQL的示例,图9为使用本发明改进以后的源代码示例图,对比之后可以看出,随着HQL语句越来越多,越来越复杂,图8中的源代码就会有越来越多的拼接HQL的代码,甚至远超过于业务代码;而对于图9来说,源代码几乎没有特别大的改动,只是HQL_ID变化而已,这对源代码的可读性和维护有非常大的提升。
通过采用本发明公开的上述技术方案,得到了如下有益的效果:
本发明公开了一种基于Mybatis框架分离及运行HQL的方法,该方法由于没有直接在源代码中编写HQL语句,仅仅只是使用一个HQL_ID来代替,所以不会存在源代码中出现大量HQL语句及动态拼接的过程的情况,开发者可以更加专注于业务代码的开发和维护。由于HQL语句是编写在xml文件中的,而xml文件是不需要进行编译即可使用的,当出现了HQL语句出现问题时,只需要修改xml文件中的HQL语句,重新启动服务既可,不需要进行源代码的重新编译、打包、部署的过程,因此即使在没有源代码的情况下,仍然可以非常方便的修复HQL语句问题。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视本发明的保护范围。

Claims (1)

1.一种基于Mybatis框架分离及运行HQL的方法,其特征在于:包括如下步骤,
S1、将要编写的HQL语句,事先按照Mybatis框架XML语法规范写入到xml文件中;每条HQL语句在xml文件中都会有一个唯一的ID,即HQL_ID;
S2、在需要某条HQL语句时,使用指定的HQL_ID调用Mybatis框架的API,Mybatis框架通过其内部的xml解析引擎将事先编写在xml文件中ID为HQL_ID的HQL语句和该HQL语句中所需要的参数名按顺序解析出来;
S3、根据参数值映射表将步骤S2中解析出的参数名按照顺序转换为参数值,并将参数值依次添加入参数值列表中;
S4、将获取的HQL语句和相应的参数值列表作为API参数,调用Hibernate框架的API完成该HQL语句的运行。
CN202110643320.9A 2021-06-09 2021-06-09 一种基于Mybatis框架分离及运行HQL的方法 Active CN113392122B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110643320.9A CN113392122B (zh) 2021-06-09 2021-06-09 一种基于Mybatis框架分离及运行HQL的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110643320.9A CN113392122B (zh) 2021-06-09 2021-06-09 一种基于Mybatis框架分离及运行HQL的方法

Publications (2)

Publication Number Publication Date
CN113392122A true CN113392122A (zh) 2021-09-14
CN113392122B CN113392122B (zh) 2022-03-11

Family

ID=77620065

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110643320.9A Active CN113392122B (zh) 2021-06-09 2021-06-09 一种基于Mybatis框架分离及运行HQL的方法

Country Status (1)

Country Link
CN (1) CN113392122B (zh)

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102110110A (zh) * 2009-12-28 2011-06-29 中国移动通信集团公司 基于soa的数据访问方法和装置
CN106020847A (zh) * 2016-06-06 2016-10-12 北京京东尚科信息技术有限公司 一种持久层开发框架配置sql的方法和装置
CN106874364A (zh) * 2016-12-30 2017-06-20 厦门南讯软件科技有限公司 基于xml配置的动态化sql查询方法
CN108121542A (zh) * 2017-11-17 2018-06-05 广东睿江云计算股份有限公司 一种基于MyBatis的SQL语句的配置方法、系统
CN111125440A (zh) * 2019-12-09 2020-05-08 重庆邮电大学 一种基于Monad的持久层复合条件查询方法与存储介质
CN112307068A (zh) * 2020-11-10 2021-02-02 天元大数据信用管理有限公司 一种动态sql查询方法

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102110110A (zh) * 2009-12-28 2011-06-29 中国移动通信集团公司 基于soa的数据访问方法和装置
CN106020847A (zh) * 2016-06-06 2016-10-12 北京京东尚科信息技术有限公司 一种持久层开发框架配置sql的方法和装置
CN106874364A (zh) * 2016-12-30 2017-06-20 厦门南讯软件科技有限公司 基于xml配置的动态化sql查询方法
CN108121542A (zh) * 2017-11-17 2018-06-05 广东睿江云计算股份有限公司 一种基于MyBatis的SQL语句的配置方法、系统
CN111125440A (zh) * 2019-12-09 2020-05-08 重庆邮电大学 一种基于Monad的持久层复合条件查询方法与存储介质
CN112307068A (zh) * 2020-11-10 2021-02-02 天元大数据信用管理有限公司 一种动态sql查询方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
SALAHUDDIN SADDAR等: ""Evaluating Performance of Hibernate ORM based Applications using HQL Query Optimization"", 《ORIENTAL JOURNAL OF COMPUTER SCIENCE AND TECHNOLOGY》 *
谭朝红: ""鱼与熊掌得兼:Hibernate与Mybatis共存"", 《HTTPS://ZHUANLAN.ZHIHU.COM/P/69096101》 *

Also Published As

Publication number Publication date
CN113392122B (zh) 2022-03-11

Similar Documents

Publication Publication Date Title
US10698682B1 (en) Computerized software development environment with a software database containing atomic expressions
CN106909510B (zh) 一种获取测试用例的方法以及服务器
US9710243B2 (en) Parser that uses a reflection technique to build a program semantic tree
US20040158820A1 (en) System for generating an application framework and components
US20150082276A1 (en) Extensible code auto-fix framework based on xml query languages
CN109947433A (zh) 一种小程序的生成方法、更新方法及装置
CN110955410B (zh) 一种代码自动生成方法、装置、设备及介质
US20050065953A1 (en) System and method for changing defined elements in a previously compiled program using a description file
US20130332449A1 (en) Generating data processing code from a directed acyclic graph
CN108255837B (zh) 一种sql解析器及方法
US11294665B1 (en) Computerized software version control with a software database and a human database
US8327343B2 (en) Method and system for optimizing source code
US11288062B2 (en) Automatic source code refactoring
CN111367893A (zh) 数据库版本迭代的方法及装置
CN117033418A (zh) 语句重写方法、系统及装置
US6381736B1 (en) Method for compile-time type-checking of arguments for externally-specified format strings
US6980995B2 (en) Method, computer program product, and system for automatically generating a hierarchial database schema report to facilitate writing application code for accessing hierarchial databases
CN108073401B (zh) 一种业务逻辑的执行方法、装置及电子设备
CN113392122B (zh) 一种基于Mybatis框架分离及运行HQL的方法
CN114064601B (zh) 存储过程转换方法、装置、设备和存储介质
EP2535813B1 (en) Method and device for generating an alert during an analysis of performance of a computer application
US20110271261A1 (en) Modifiable high-level intermediate representation of source code
US7058651B2 (en) Method, computer program product, and system for automatic class generation with simultaneous customization and interchange capability
Neukirchen et al. Quality assurance for TTCN‐3 test specifications
JPH07182179A (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