CN113392122B - 一种基于Mybatis框架分离及运行HQL的方法 - Google Patents
一种基于Mybatis框架分离及运行HQL的方法 Download PDFInfo
- Publication number
- CN113392122B CN113392122B CN202110643320.9A CN202110643320A CN113392122B CN 113392122 B CN113392122 B CN 113392122B CN 202110643320 A CN202110643320 A CN 202110643320A CN 113392122 B CN113392122 B CN 113392122B
- Authority
- CN
- China
- Prior art keywords
- hql
- statement
- framework
- xml file
- parameter
- 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/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/80—Information 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
技术领域
本发明涉及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语句的运行;
步骤S2中,对于需要动态拼接的HQL语句,使用Mybatis框架提供的动态SQL功能完成,每条HQL语句在xml文件中都会有一个唯一的ID,即HQL_ID;
方法是基于Mybatis框架所具有的xml文件解析的功能,将其作为HQL语句的存储介质,在使用时将存放于xml文件中的HQL使用Mybatis框架解析出来,通过一定的组装,形成Hibernate框架所需要的HQL语句运行参数,以进行运行;
针对具体场景:根据用户名、年龄和性别三种属性精确查询用户信息,如果某个属性没有值,则不对该属性进行过滤;
首先将HQL语句写入xml文件中;
调用Mybatis框架的API,将事先编写在xml文件中ID为IUserService.findUser的HQL语句和HQL语句中所需要的参数名按顺序解析出来;
根据接收到的参数值映射表将参数名按照顺序转换为参数值,并依次添加入参数值列表;
将得到的HQL语句和有顺序的参数值列表作为API参数,调用Hibernate的API完成HQL的运行。
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 CN113392122A (zh) | 2021-09-14 |
CN113392122B true 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 (5)
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查询方法 |
CN111125440A (zh) * | 2019-12-09 | 2020-05-08 | 重庆邮电大学 | 一种基于Monad的持久层复合条件查询方法与存储介质 |
CN112307068A (zh) * | 2020-11-10 | 2021-02-02 | 天元大数据信用管理有限公司 | 一种动态sql查询方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108121542B (zh) * | 2017-11-17 | 2021-07-06 | 广东睿江云计算股份有限公司 | 一种基于MyBatis的SQL语句的配置方法、系统 |
-
2021
- 2021-06-09 CN CN202110643320.9A patent/CN113392122B/zh active Active
Patent Citations (5)
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查询方法 |
CN111125440A (zh) * | 2019-12-09 | 2020-05-08 | 重庆邮电大学 | 一种基于Monad的持久层复合条件查询方法与存储介质 |
CN112307068A (zh) * | 2020-11-10 | 2021-02-02 | 天元大数据信用管理有限公司 | 一种动态sql查询方法 |
Non-Patent Citations (2)
Title |
---|
"Evaluating Performance of Hibernate ORM based Applications using HQL Query Optimization";Salahuddin Saddar等;《Oriental Journal of Computer Science and Technology》;20180531;第11卷(第2期);第115-125页 * |
"鱼与熊掌得兼:Hibernate与Mybatis共存";谭朝红;《https://zhuanlan.zhihu.com/p/69096101》;20190614;第1-15页 * |
Also Published As
Publication number | Publication date |
---|---|
CN113392122A (zh) | 2021-09-14 |
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 | |
US6493661B1 (en) | Reusable multi-language support facility for software | |
US20040158820A1 (en) | System for generating an application framework and components | |
CN109947433A (zh) | 一种小程序的生成方法、更新方法及装置 | |
US20050065953A1 (en) | System and method for changing defined elements in a previously compiled program using a description file | |
CN109408493A (zh) | 一种数据源的迁移方法及系统 | |
CN111427583A (zh) | 组件的编译方法、装置和电子设备及计算机可读存储介质 | |
CN111694846B (zh) | 一种基于Type 2 JDBC驱动的分离模式分布式存储过程实现方法 | |
CN114064601B (zh) | 存储过程转换方法、装置、设备和存储介质 | |
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 | |
CN113392122B (zh) | 一种基于Mybatis框架分离及运行HQL的方法 | |
US8327343B2 (en) | Method and system for optimizing source code | |
US9697021B2 (en) | Modifiable high-level intermediate representation of source code | |
CN111142848B (zh) | 一种软件程序编译方法、执行方法及装置 | |
EP2535813B1 (en) | Method and device for generating an alert during an analysis of performance of a computer application | |
US7873949B2 (en) | In source code suppression of binary analysis | |
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 | |
CN114791811A (zh) | 一种基于元函数模板的汇编器实现方法 | |
GB2420638A (en) | Method of substituting code fragments in Internal Representation |
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 |