CN110989998A - 动态sql语句写入代码的方法、程序代码执行方法及平台 - Google Patents
动态sql语句写入代码的方法、程序代码执行方法及平台 Download PDFInfo
- Publication number
- CN110989998A CN110989998A CN201911291264.6A CN201911291264A CN110989998A CN 110989998 A CN110989998 A CN 110989998A CN 201911291264 A CN201911291264 A CN 201911291264A CN 110989998 A CN110989998 A CN 110989998A
- Authority
- CN
- China
- Prior art keywords
- file
- executable
- groovy
- program code
- execution
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 58
- 230000008569 process Effects 0.000 claims abstract description 16
- 230000004044 response Effects 0.000 abstract description 7
- 238000012423 maintenance Methods 0.000 description 5
- 239000000243 solution Substances 0.000 description 3
- 230000000694 effects Effects 0.000 description 2
- 230000004888 barrier function Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 238000002347 injection Methods 0.000 description 1
- 239000007924 injection Substances 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明提供一种动态sql语句写入代码的方法、程序代码执行方法及平台,该动态sql语句写入代码的方法通过在目标程序代码编写需要使用mybatis框架过程中,接收groovy文件创建指令;根据groovy文件创建指令,对应创建并展示groovy空白文件;接收外部在groovy空白文件中编辑的动态sql语句;接收文件保存指令,生成目标程序代码的可执行groovy文件,并保存;减小整体编码工作量的同时,提高了代码阅读便利性,减轻了程序IO压力,提高了程序整体响应能力。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种动态sql语句写入代码的方法、程序代码执行方法及平台。
背景技术
Spring框架是一个开放源代码的J2EE应用程序框架,由Rod Johnson发起,是一个开放源代码的设计层面框架,它解决的是业务逻辑层和其他各层的松耦合问题。
MyBatis本是apache的一个开源项目iBatis,iBatis一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架,它支持定制化SQL、存储过程以及高级映射。
Sql即Structured Query Language,结构化查询语言,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
在spring框架内,使用mybatis时往往要将sql内容写入特定格式的xml文件中,使原本完整的数据操作层分为两个逻辑关联的不同格式文件:写有数据操作定义的java文件和写有数据具体操作sql的xml文件。
这种做法从语言层面割裂了原本完整的一个操作,给开发人员造成代码阅读障碍,对后期维护造成巨大不便,同时需要依靠java语言进行xml内容的解析,影响应用整体响应速度。
传统解决此问题的方案是,依靠mybatis提供的注解,将sql语句作为注解的内容写入java接口定义中,但是此方案存在天然的不足:注解无法使用mybatis框架的标签,复杂sql语句、特别是带有复杂判断逻辑分支的语句无法直接写入注解中,因此该方案整体应用度不高。
发明内容
为了解决背景技术中所存在的问题,本发明提供一种动态sql语句写入代码的方法、程序代码执行方法及平台。
为解决上述技术问题,本发明提供一种动态sql语句写入代码的方法,包括:
在目标程序代码编写需要使用mybatis框架过程中,接收groovy文件创建指令;
根据所述groovy文件创建指令,对应创建并展示groovy空白文件;
接收外部在所述groovy空白文件中编辑的动态sql语句;
接收文件保存指令,生成所述目标程序代码的可执行groovy文件,并保存。
可选的,所述在代码编写需要使用mybatis框架过程中,还包括:
接收java文件创建指令,以生成所述目标程序代码的可执行java文件,并保存。
可选的,所述方法还包括:
在保存所述可执行groovy文件时,将其与所述可执行java文件进行关联,以使运行所述目标程序代码时,可关联所述可执行java文件与所述可执行groovy文件。
本发明还提供一种程序代码执行方法,包括:
接收对目标程序代码的执行指令;
根据所述执行指令,获取所述目标程序代码的可执行java文件以及可执行groovy文件;所述可执行groovy文件存储有所述目标程序代码的动态sql语句;
基于可执行java文件以及所述可执行groovy文件,实现对所述目标程序代码的执行过程。
可选的,所述执行指令中携带有所述可执行java文件的第一存储地址,以及可执行groovy文件的第二存储地址。
可选的,所述根据所述执行指令,获取所述目标程序代码的可执行java文件以及可执行groovy文件包括:
对所述执行指令进行解析,得到所述可执行java文件的第一存储地址,以及可执行groovy文件的第二存储地址;根据所述第一存储地址获取到所述可执行java文件;根据所述第二存储地址获取到所述可执行groovy文件。
本发明还提供一种程序代码执行平台,包括:
指令接收模块,用于接收对目标程序代码的执行指令;
文件索引模块,用于根据所述执行指令,获取所述目标程序代码的可执行java文件以及可执行groovy文件;所述可执行groovy文件存储有所述目标程序代码的动态sql语句;
代码执行模块,用于基于可执行java文件以及所述可执行groovy文件,实现对所述目标程序代码的执行过程。
可选的,所述执行指令中携带有所述可执行java文件的第一存储地址,以及可执行groovy文件的第二存储地址。
可选的,所述文件索引模块通过解析所述执行指令,得到所述第一存储地址、所述第二存储地址,并根据所述第一存储地址获得到所述可执行java文件;以及根据所述第二存储地址获得到所述可执行groovy文件。
本发明的有益效果是:
根据本发明提供的动态sql语句写入代码的方法、程序代码执行方法及平台,该动态sql语句写入代码的方法通过在目标程序代码编写需要使用mybatis框架过程中,接收groovy文件创建指令;根据groovy文件创建指令,对应创建并展示groovy空白文件;接收外部在groovy空白文件中编辑的动态sql语句;接收文件保存指令,生成目标程序代码的可执行groovy文件,并保存;充分利用了spring框架的IOC(Inversion of Control,控制反转)特性,同时利用java虚拟机JVM平台支持的脚本语言groovy的多行字符串特性,将动态sql语句直接作为字符串进行实现,达到方法签名即方法定义,方法实现即逻辑实现的效果,将原来割裂的两种文件格式合二为一,减小整体编码工作量的同时,大大提高了代码阅读便利性,降低后期维护成本;另外,将动态sql语句作为字符串进行实现,大大减轻了程序IO压力,提高了程序整体响应能力,提高了系统吞吐量。
附图说明
图1为本发明实施例一的动态sql语句写入代码的方法流程示意图;
图2为本发明实施例二的程序代码执行方法流程示意图;
图3为本发明实施例三的程序代码执行平台结构示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,下面通过具体实施方式结合附图对本发明作进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
实施例一:
为了解决当前在使用mybatis框架时,需要将动态sql内容写入xml特定文件格式中,由于语言层面割裂,进而导致影响程序响应速度,且不易阅读代码、对后期维护不便的问题,本实施例提供一种动态sql语句写入代码的方法,通过利用JVM平台支持的脚本语言groovy的多行字符串特性,将动态sql语句直接作为字符串进行实现,达到提高代码阅读便利性,降低后期维护成本,减轻程序IO压力,提高程序整体响应能力的效果。
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,引入JVM后,Java语言在不同平台上运行时不需要重新编译,使得Java语言可以屏蔽具体平台相关的信息,让Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。
Groovy是一种基于JVM的敏捷开发语言,它结合了Python、Ruby和Smalltalk的许多强大的特性,Groovy代码能够与Java代码很好地结合,也能用于扩展现有代码。由于其运行在JVM上的特性,Groovy也可以使用其他非Java语言编写的库。
请参见图1,图1为本实施例的动态sql语句写入代码的方法流程示意图,该方法主要包括如下步骤:
S101、在目标程序代码编写需要使用mybatis框架过程中,接收groovy文件创建指令。
可选的,在使用mybatis框架过程的过程中,还包括:
接收java文件创建指令,以生成目标程序代码的可执行java文件,并保存。
目标程序代码主要有两部分组成,一是写有数据具体操作的动态sql语句,二是写有数据操作定义的java文件。
S102、根据groovy文件创建指令,对应创建并展示groovy空白文件。
S103、接收外部在groovy空白文件中编辑的动态sql语句。
S104、接收文件保存指令,生成目标程序代码的可执行groovy文件,并保存。
在保存可执行groovy文件时,将其与可执行java文件进行关联,以使运行目标程序代码时,可关联可执行java文件与可执行groovy文件,保证程序的正常执行。
本实施例通过将目标程序代码的动态sql语句,写入groovy文件中,可以解决将动态sql内容写入特定格式的xml文件导致的语言层面割裂,给开发人员造成代码阅读障碍,对后期维护造成不便,同时需要依靠java语言进行xml内容的解析,影响应用整体响应速度的问题。
通过利用java虚拟机JVM平台支持的脚本语言groovy的多行字符串特性,将sql语句直接作为字符串进行实现,达到方法签名即方法定义,方法实现即逻辑实现的效果,将原来割裂的两个文件格式合二为一,减小整体编码工作量的同时,大大提高代码阅读便利性,降低后期维护成本,同时,将sql语句作为字符串进行实现,大大减轻应用IO压力,提高应用整体响应能量,提高系统吞吐量。
本方案的原理在于利用spring的IOC特性,将MVC模型中强依赖的各个实例拆分为注入依赖的形式,groovy实现的数据操作层对象也是spring容器管理下的一个实例,自然也是能够被IOC容器所注入的。利用完全兼容java语法、可无缝集成java语言的、对java语言进行相当内容的扩展的groovy语言的多行字符串特性,可完整保持动态sql语句的各种格式,同时作为字符串,对mybatis提供的各种逻辑判断标签也都兼容。对于传统java开发者也不存在语法的陌生和编辑器的陌生,java与groovy都是基于JVM平台,完全可以互相引用。故此方案,也不失为一种解决mybatis框架的臃肿xml文件的方法。
实施例二:
本实施例在上述实施例一的基础上,提供一种程序代码执行方法,请参见图2,该方法主要包括如下步骤:
S201、接收对目标程序代码的执行指令。
可选的,执行指令中携带有可执行java文件的第一存储地址,以及可执行groovy文件的第二存储地址。
S202、根据执行指令,获取目标程序代码的可执行java文件以及可执行groovy文件;其中,可执行groovy文件存储有目标程序代码的动态sql语句。
对执行指令进行解析,得到可执行java文件的第一存储地址,以及可执行groovy文件的第二存储地址;根据该第一存储地址获取到目标程序代码的可执行java文件;根据第二存储地址获取到目标程序代码的的可执行groovy文件。
S203、基于可执行java文件以及可执行groovy文件,实现对目标程序代码的执行过程。
在JVM平台执行程序代码过程中,无需对xml文件格式内容的解析,java与groovy都是基于JVM平台,完全可以互相引用,可以提高应用整体响应速度。
实施例三:
本实施例在上述实施例一和/或实施例二的基础上,提供一种程序代码执行平台,请参见图3,该平台包括:
令接收模块31,用于接收对目标程序代码的执行指令。
文件索引模块32,用于根据执行指令,获取目标程序代码的可执行java文件以及可执行groovy文件;其中,可执行groovy文件存储有目标程序代码的动态sql语句。
其中,执行指令中携带有可执行java文件的第一存储地址,以及可执行groovy文件的第二存储地址。
可选的,文件索引模块32通过解析执行指令,得到第一存储地址、第二存储地址,并根据该第一存储地址获得到可执行java文件;以及根据该第二存储地址获得到可执行groovy文件。
代码执行模块33,用于基于可执行java文件以及可执行groovy文件,实现对目标程序代码的执行过程。
本实施例中,该程序代码执行平台具体可以为JVM平台。
显然,本领域的技术人员应该明白,上述本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在计算机存储介质(ROM/RAM、磁碟、光盘)中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。所以,本发明不限制于任何特定的硬件和软件结合。
以上内容是结合具体的实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。
Claims (9)
1.一种动态sql语句写入代码的方法,其特征在于,包括:
在目标程序代码编写需要使用mybatis框架过程中,接收groovy文件创建指令;
根据所述groovy文件创建指令,对应创建并展示groovy空白文件;
接收外部在所述groovy空白文件中编辑的动态sql语句;
接收文件保存指令,生成所述目标程序代码的可执行groovy文件,并保存。
2.如权利要求1所述的动态sql语句写入代码的方法,其特征在于,所述在代码编写需要使用mybatis框架过程中,还包括:
接收java文件创建指令,以生成所述目标程序代码的可执行java文件,并保存。
3.如权利要求2所述的动态sql语句写入代码的方法,其特征在于,所述方法还包括:
在保存所述可执行groovy文件时,将其与所述可执行java文件进行关联,以使运行所述目标程序代码时,可关联所述可执行java文件与所述可执行groovy文件。
4.一种程序代码执行方法,其特征在于,包括:
接收对目标程序代码的执行指令;
根据所述执行指令,获取所述目标程序代码的可执行java文件以及可执行groovy文件;所述可执行groovy文件存储有所述目标程序代码的动态sql语句;
基于所述可执行java文件以及所述可执行groovy文件,实现对所述目标程序代码的执行过程。
5.如权利要求4所述的程序代码执行方法,其特征在于,所述执行指令中携带有所述可执行java文件的第一存储地址,以及可执行groovy文件的第二存储地址。
6.如权利要求5所述的程序代码执行方法,其特征在于,所述根据所述执行指令,获取所述目标程序代码的可执行java文件以及可执行groovy文件包括:
对所述执行指令进行解析,得到所述可执行java文件的第一存储地址,以及可执行groovy文件的第二存储地址;根据所述第一存储地址获取到所述可执行java文件;根据所述第二存储地址获取到所述可执行groovy文件。
7.一种程序代码执行平台,其特征在于,包括:
指令接收模块,用于接收对目标程序代码的执行指令;
文件索引模块,用于根据所述执行指令,获取所述目标程序代码的可执行java文件以及可执行groovy文件;所述可执行groovy文件存储有所述目标程序代码的动态sql语句;
代码执行模块,用于基于所述可执行java文件以及所述可执行groovy文件,实现对所述目标程序代码的执行过程。
8.如权利要求7所述的程序代码执行平台,其特征在于,所述执行指令中携带有所述可执行java文件的第一存储地址,以及可执行groovy文件的第二存储地址。
9.如权利要求7所述的程序代码执行平台,其特征在于,所述文件索引模块通过解析所述执行指令,得到所述第一存储地址、所述第二存储地址,并根据所述第一存储地址获得到所述可执行java文件;以及根据所述第二存储地址获得到所述可执行groovy文件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911291264.6A CN110989998A (zh) | 2019-12-16 | 2019-12-16 | 动态sql语句写入代码的方法、程序代码执行方法及平台 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911291264.6A CN110989998A (zh) | 2019-12-16 | 2019-12-16 | 动态sql语句写入代码的方法、程序代码执行方法及平台 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110989998A true CN110989998A (zh) | 2020-04-10 |
Family
ID=70093790
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911291264.6A Pending CN110989998A (zh) | 2019-12-16 | 2019-12-16 | 动态sql语句写入代码的方法、程序代码执行方法及平台 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110989998A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111506611A (zh) * | 2020-04-21 | 2020-08-07 | 北京同邦卓益科技有限公司 | 数据的查询方法、装置、设备及存储介质 |
CN113656036A (zh) * | 2020-05-12 | 2021-11-16 | 深圳兆日科技股份有限公司 | 基于Mybatis的编译方法、装置、终端及介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110153351A1 (en) * | 2009-12-17 | 2011-06-23 | Gregory Vesper | Collaborative medical imaging web application |
CN109992259A (zh) * | 2019-04-15 | 2019-07-09 | 成都四方伟业软件股份有限公司 | 函数动态创建方法、装置及电子设备 |
-
2019
- 2019-12-16 CN CN201911291264.6A patent/CN110989998A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110153351A1 (en) * | 2009-12-17 | 2011-06-23 | Gregory Vesper | Collaborative medical imaging web application |
CN109992259A (zh) * | 2019-04-15 | 2019-07-09 | 成都四方伟业软件股份有限公司 | 函数动态创建方法、装置及电子设备 |
Non-Patent Citations (3)
Title |
---|
FOLLOWYOURHEART2015: "SpringBoot集成Groovy、Mybatis注解 实现动态SQL,帮你摆脱繁琐的XML配置", 《HTTPS://BLOG.CSDN.NET/MUERHUOXU/ARTICLE/DETAILS/86756795》 * |
MAS_WANG: "Groovy详解", 《HTTPS://WWW.JIANSHU.COM/P/8C6DCF6727C8》 * |
ZZZ: "Java 实例 - 如何执行指定class文件目录(classpath)", 《HTTPS://WWW.RUNOOB.COM/JAVA/ENV-CLASSPATH.HTML》 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111506611A (zh) * | 2020-04-21 | 2020-08-07 | 北京同邦卓益科技有限公司 | 数据的查询方法、装置、设备及存储介质 |
CN113656036A (zh) * | 2020-05-12 | 2021-11-16 | 深圳兆日科技股份有限公司 | 基于Mybatis的编译方法、装置、终端及介质 |
CN113656036B (zh) * | 2020-05-12 | 2024-03-01 | 深圳兆日科技股份有限公司 | 基于Mybatis的编译方法、装置、终端及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103064720B (zh) | 简档导向的jit代码生成 | |
US8935683B2 (en) | Inline function linking | |
KR100661393B1 (ko) | 웹 프로그래밍 환경을 응용한 웹사이트 관리 시스템 및방법 | |
US7610545B2 (en) | Annotations for tracking provenance | |
CN108139891B (zh) | 用于生成建议以纠正未定义标记错误的方法和系统 | |
CN110955431A (zh) | 编译环境的处理方法及装置 | |
US10409559B2 (en) | Single-source-base compilation for multiple target environments | |
US9141344B2 (en) | Hover help support for application source code | |
CA2753626C (en) | Packed data objects | |
US11288062B2 (en) | Automatic source code refactoring | |
US6665688B1 (en) | Method and system for automatically regenerating data on-demand | |
US8225286B2 (en) | Debugging interpreted input | |
CN110989998A (zh) | 动态sql语句写入代码的方法、程序代码执行方法及平台 | |
CN111475150B (zh) | 一种跨语言绑定方法、装置、设备及存储介质 | |
KR20080038306A (ko) | 널가능과 후 바인딩 | |
CN104317723B (zh) | 一种驱动程序运行信息的跟踪方法及系统 | |
US7530060B1 (en) | Methods and computer program product for optimizing binaries with coding style formalization | |
NO329240B1 (no) | System og fremgangsmate for forklarende definering og bruk av undergrupper innenfor dokumentkoding | |
CN105867886B (zh) | 一种写表格的方法及装置 | |
CN117667095A (zh) | 一种页面代码导出方法、装置、设备和存储介质 | |
US20140359579A1 (en) | Combined data and instruction test content | |
US9405739B1 (en) | Source code format for IDE code development with embedded objects | |
US9015679B2 (en) | System and method for translating business application functions into DBMS internal programming language procedures | |
US10102115B2 (en) | Incremental program construction from embedded program code for external testing | |
CN105843661A (zh) | 一种面向主机系统的代码重定位方法及其系统 |
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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20200410 |