CN111949491B - MyBatis应用程序的SQL提取方法及装置 - Google Patents
MyBatis应用程序的SQL提取方法及装置 Download PDFInfo
- Publication number
- CN111949491B CN111949491B CN202010821261.5A CN202010821261A CN111949491B CN 111949491 B CN111949491 B CN 111949491B CN 202010821261 A CN202010821261 A CN 202010821261A CN 111949491 B CN111949491 B CN 111949491B
- Authority
- CN
- China
- Prior art keywords
- mybatis
- application program
- class
- embedded point
- application
- 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
- 238000000605 extraction Methods 0.000 title claims abstract description 24
- 238000013507 mapping Methods 0.000 claims abstract description 95
- 238000000034 method Methods 0.000 claims description 90
- 238000004590 computer program Methods 0.000 claims description 16
- 238000012544 monitoring process Methods 0.000 claims description 10
- 238000004458 analytical method Methods 0.000 claims description 8
- 238000004806 packaging method and process Methods 0.000 claims description 6
- 230000006835 compression Effects 0.000 claims description 5
- 238000007906 compression Methods 0.000 claims description 5
- 238000012986 modification Methods 0.000 abstract description 7
- 230000004048 modification Effects 0.000 abstract description 7
- 230000006870 function Effects 0.000 description 16
- 239000003795 chemical substances by application Substances 0.000 description 12
- 238000004891 communication Methods 0.000 description 12
- 238000010586 diagram Methods 0.000 description 10
- 238000012545 processing Methods 0.000 description 6
- 238000012360 testing method Methods 0.000 description 6
- 239000000872 buffer Substances 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 3
- 238000011161 development Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000008569 process Effects 0.000 description 3
- 230000003068 static effect Effects 0.000 description 3
- 238000007429 general method Methods 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 230000001413 cellular effect Effects 0.000 description 1
- 239000007795 chemical reaction product Substances 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000002347 injection Methods 0.000 description 1
- 239000007924 injection Substances 0.000 description 1
- 229940004975 interceptor Drugs 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000000523 sample Substances 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 239000000243 solution Substances 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 238000000844 transformation Methods 0.000 description 1
- 239000011800 void material Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3089—Monitoring arrangements determined by the means or processing involved in sensing the monitored data, e.g. interfaces, connectors, sensors, probes, agents
- G06F11/3093—Configuration details thereof, e.g. installation, enabling, spatial arrangement of the probes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/302—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/75—Structural analysis for program understanding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/80—Database-specific techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/815—Virtual
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/865—Monitoring of software
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Stored Programmes (AREA)
Abstract
本发明提供的一种MyBatis应用程序的SQL提取方法及装置,可用于信息安全技术领域,通过在已设置埋点应用的MyBatis应用程序在加载一加载类之前和之后,均链式执行所述埋点应用的预设拦截链中的埋点逻辑,进而加载修改后的所述加载类;然后运行添加埋点应用的MyBatis应用程序,替换所述MyBatis应用程序的映射文件中非预编译动态传入的参数,得到最终的映射文件;最后对所述映射文件进行解析得到MyBatis应用程序的SQL语句,从而在保证映射文件中的sql完整性的同时,可以追溯至相应的程序,便于后期的修改。
Description
技术领域
本发明涉及程序技术领域,尤其涉及一种MyBatis应用程序的SQL提取方法及装置。
背景技术
本部分旨在为权利要求书中陈述的本发明实施例提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。
在目前Mybatis项目开发过程中,由于项目大,一般是多人合作开发模式,在开发过程中对于数据库的访问和数据的增删查改除了小工程采用注解的方式之外,通常都是采用映射文件的方式,对于动态传值的方式,有两种,一种是通过绑定变量对字符串进行动态传入,另一种是DBMS,在应用预编译阶段会把参数部分用一个占位符?替代。目前对sql语句进行静态扫描前提是需要有完整的sql语句,一般可以通过查询日志对sql语句进行提取,然后解析、分析,一种是利用对映射文件的解析进行sql提取。
但是通过查询日志提取sql语句,如果扫描出违例或者有问题的sql无法追溯到相应的程序提供给相应的程序员进行修改。而通过解析映射文件进行sql提取,对于通过程序进行动态传入的sql则无法获取完整的sql,这样得到的扫描结果并不准确。
发明内容
为了解决上述问题的至少一个,本发明实施例提供了一种MyBatis应用程序的SQL提取方法,包括:
在已设置埋点应用的MyBatis应用程序在加载一加载类之前和之后,均链式执行所述埋点应用的预设拦截链中的埋点逻辑,进而加载修改后的所述加载类;
运行添加埋点应用的MyBatis应用程序,替换所述MyBatis应用程序的映射文件中非预编译动态传入的参数,得到最终的映射文件;
对所述映射文件进行解析得到MyBatis应用程序的SQL语句。
在某些实施例中,还包括:
复制MyBatis应用程序的完整映射文件,并记录以非预编译动态传入的映射文件、对应的映射对象标识和传入对象。
在某些实施例中,还包括:
定义方法拦截器,在被拦截的方法的执行前和执行后嵌入埋点逻辑,进而在对象调用被拦截的方法时,将在被拦截的方法执行之前和之后均链式执行预设拦截链中的埋点逻辑;
定义实现所述埋点应用的启动类,以使虚拟机在加载各种类之前会将方法拦截器的拦截方法嵌入到被拦截的类中,然后加载修改后的所述加载类。
在某些实施例中,所述定义实现所述埋点应用的启动类,包括:
通过javaagent选项提供启动参数;
创建Java虚拟机监控接口的实例。
在某些实施例中,在已设置埋点应用的MyBatis应用程序在加载一加载类之前和之后,均链式执行所述埋点应用的预设拦截链中的埋点逻辑,包括:
在埋点应用中添加定义与设定压缩包相关数据的清单文件,设置其预启动类项为启动类的名称;
将当前埋点应用编译并且打包成压缩包;
在需要埋点的MyBatis应用程序的启动脚本中添加该压缩包的运行命令。
本发明还提供一种MyBatis应用程序的SQL提取装置,包括:
埋点逻辑执行模块,在已设置埋点应用的MyBatis应用程序在加载一加载类之前和之后,均链式执行所述埋点应用的预设拦截链中的埋点逻辑,进而加载修改后的所述加载类;
埋点应用运行模块,运行添加埋点应用的MyBatis应用程序,替换所述MyBatis应用程序的映射文件中非预编译动态传入的参数,得到最终的映射文件;
解析模块,对所述映射文件进行解析得到MyBatis应用程序的SQL语句。
在某些实施例中,还包括:
复制模块,复制MyBatis应用程序的完整映射文件,并记录以非预编译动态传入的映射文件、对应的映射对象标识和传入对象。
在某些实施例中,还包括:
拦截器定义模块,定义方法拦截器,在被拦截的装置的执行前和执行后嵌入埋点逻辑,进而在对象调用被拦截的装置时,将在被拦截的装置执行之前和之后均链式执行预设拦截链中的埋点逻辑;
启动类定义模块,定义实现所述埋点应用的启动类,以使虚拟机在加载各种类之前会将装置拦截器的拦截装置嵌入到被拦截的类中,然后加载修改后的所述加载类。
在某些实施例中,所述启动类定义模块,包括:
启动参数提供单元,通过javaagent选项提供启动参数;
实例创建单元,创建Java虚拟机监控接口的实例。
在某些实施例中,在已设置埋点应用的MyBatis应用程序在加载一加载类之前和之后,均链式执行所述埋点应用的预设拦截链中的埋点逻辑,包括:
在埋点应用中添加定义与设定压缩包相关数据的清单文件,设置其预启动类项为启动类的名称;
将当前埋点应用编译并且打包成压缩包;
在需要埋点的MyBatis应用程序的启动脚本中添加该压缩包的运行命令。
本发明实施例提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述第一方面任一所述方法。
本发明实施例提供了一种计算机可读存储介质,所述计算机可读存储介质存储有执行上述第一方面任一所述方法的计算机程序。
综上所述,本发明提供的一种MyBatis应用程序的SQL提取方法及装置,通过在已设置埋点应用的MyBatis应用程序在加载一加载类之前和之后,均链式执行所述埋点应用的预设拦截链中的埋点逻辑,进而加载修改后的所述加载类;然后运行添加埋点应用的MyBatis应用程序,替换所述MyBatis应用程序的映射文件中非预编译动态传入的参数,得到最终的映射文件;最后对所述映射文件进行解析得到MyBatis应用程序的SQL语句,从而在保证映射文件中的sql完整性的同时,可以追溯至相应的程序,便于后期的修改。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1为本发明实施例中提供的一种MyBatis应用程序的SQL提取方法流程示意图;
图2为本发明实施例中提供的一种MyBatis应用程序的SQL提取装置框图。
图3为适用于实现本发明中的MyBatis应用程序的SQL提取方法的计算机设备结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
下面参考本发明的若干代表性实施方式,详细阐释本发明的原理和精神。
虽然本发明提供了如下述实施例或附图所示的方法操作步骤或装置结构,但基于常规或者无需创造性的劳动在所述方法或装置中可以包括更多或者更少的操作步骤或模块单元。在逻辑性上不存在必要因果关系的步骤或结构中,这些步骤的执行顺序或装置的模块结构不限于本发明实施例或附图所示的执行顺序或模块结构。所述的方法或模块结构的在实际中的装置或终端产品应用时,可以按照实施例或者附图所示的方法或模块结构进行顺序执行或者并行执行。
需要说明的是,本发明可用于信息安全技术领域,当然也可用于其他技术领域,例如数据处理技术领域等,本发明对此不作限制。
图1示出了本发明实施例中一种MyBatis应用程序的SQL提取方法的流程示意图,包括:
S1:在已设置埋点应用的MyBatis应用程序在加载一加载类之前和之后,均链式执行所述埋点应用的预设拦截链中的埋点逻辑,进而加载修改后的所述加载类;
S2:运行添加埋点应用的MyBatis应用程序,替换所述MyBatis应用程序的映射文件中非预编译动态传入的参数,得到最终的映射文件;
S3:对所述映射文件进行解析得到MyBatis应用程序的SQL语句。
本发明提供的一种MyBatis应用程序的SQL提取方法及装置,通过在已设置埋点应用的MyBatis应用程序在加载一加载类之前和之后,均链式执行所述埋点应用的预设拦截链中的埋点逻辑,进而加载修改后的所述加载类;然后运行添加埋点应用的MyBatis应用程序,替换所述MyBatis应用程序的映射文件中非预编译动态传入的参数,得到最终的映射文件;最后对所述映射文件进行解析得到MyBatis应用程序的SQL语句,从而在保证映射文件中的sql完整性的同时,可以追溯至相应的程序,便于后期的修改。
本发明中以非预编译动态传入可以是$方式传入,本发明发明人发现,由于Mybatis应用#动态传参方式很大程度可以防止sql注入,所以$方式只用于传入数据库对象,比如表名,故对动态参数的提取只针对$方式,#方式对后续得到的完整sql与扫描结果没有影响,可以忽略。
在优选的实施例中,步骤S1具体包括:
S11:在埋点应用中添加定义与设定压缩包相关数据的清单文件,设置其预启动类项为启动类的名称。
具体而言,步骤S11包括在埋点应用中添加META-INF/MANIFEST.MF文件,并将其manifest属性中的Premain-Class项设置为上述启动类的名称,即SqlSessionFactoryBuilder。
S12:将当前埋点应用编译并且打包成压缩包;
具体而言,可以将当前埋点应用编译并且打包成jar代理包,比如agent.jar。
S13:在需要埋点的MyBatis应用程序的启动脚本中添加该压缩包的运行命令。
该步骤中,在需要埋点的Mybatis应用的启动脚本中添加该jar包的运行命令。比如:java-javaagent:path/agent.jar-jar MybatisApp.jar。其中,path是agent.jar的绝对路径,MybatisApp指的是需要进行埋点的Mybatis应用。
在优选的实施例中,上述方法还包括:
复制MyBatis应用程序的完整映射文件,并记录以非预编译动态传入的映射文件、对应的映射对象标识和传入对象。
本步骤中,对应用的映射文件进行复制,避免字符串替换时对应用产生影响,并且记录以$方式传入参数的对应文件、MapperId以及相应的$参数。
此外,在一些实施例中,本发明还包括:
定义方法拦截器,在被拦截的方法的执行前和执行后嵌入埋点逻辑,进而在对象调用被拦截的方法时,将在被拦截的方法执行之前和之后均链式执行预设拦截链中的埋点逻辑;
定义实现所述埋点应用的启动类,以使虚拟机在加载各种类之前会将方法拦截器的拦截方法嵌入到被拦截的类中,然后加载修改后的所述加载类。
具体而言,定义方法拦截器,该方法拦截器用于在被拦截的方法的执行前、后嵌入埋点逻辑;为该方法拦截器创建拦截方法,方法拦截器的拦截方法的实现功能为:当对象调用被拦截的方法时,该拦截方法将在被拦截的方法执行之前和之后均链式执行(一个接一个执行)预设拦截链中的埋点逻辑。该拦截方法对被拦截的普通方法进行拦截,用于在被拦截的普通方法的执行前、后嵌入埋点逻辑。
可以理解的是,本实施例中,方法拦截器嵌入的埋点逻辑主要包括:捕获涉及映射文件的MapperId以及传入对象,判断是否存在于步骤一获取到的信息,若存在则对相应的映射文件中的参数字符串进行替换并保存。
在优选的实施例中,所述定义实现所述埋点应用的启动类,包括:
通过javaagent选项提供启动参数;
创建Java虚拟机监控接口的实例。
该实施例中,为埋点应用定义基于javaagent的启动类,该埋点应用为实现埋点的应用;并为该启动类创建启动类实现方法,该启动类实现方法具有两个参数:一个是通过javaagent选项提供的启动参数(args),一个是Java虚拟机监控接口的实例;且该启动类实现方法的功能为:读取复制的映射文件,将方法拦截器(MethodInterceptor)的拦截方法(interception)注册到所述Java虚拟机监控接口的实例上,使得Java虚拟机在加载各种类之前会将方法拦截器的拦截方法嵌入到被拦截的类中,然后加载修改后的类。
本实施例中,Mybatis应用程序的启动入口均为SqlSessionFactoryBuilder,故为该启动类创建的启动类实现方法命名为premain,且启动类实现方法premain定义如下:public static void premain(String args,Instrumentation inst);该启动类实现方法premain运行main方法之前,与其运行在同一个JVM(Java Virtual Machine,Java虚拟机)中。其中,第一个参数是通过javaagent选项提供的启动参数;第二个参数是一个Java虚拟机监控接口java.lang.Instrumentation的实例,它由JVM自动传入,该Java虚拟机监控接口提供了类定义的转换与操作。
将方法拦截器(MethodInterceptor)的拦截方法(interception)注册到所述的JVM监控接口的实例上有多种方式,比如ASM、Javassist、Byte buddy等等。
下面以名称为Test的类为例进行说明。
1)以名称为Test的类为例,当对象调用Test类的普通方法时,实际上执行的代码是:
2)在执行Test类的普通方法之前,执行方法拦截器(Method Interceptor),方法拦截器的拦截方法(interception)将执行埋点逻辑;
3)执行Test类的普通方法(Test.method);
4)执行方法拦截器(MethodInterceptor),方法拦截器的拦截方法(interception)将执行埋点逻辑。
本发明提出一种一种MyBatis应用程序的SQL提取方法,可以对mybatis应用中涉及的sql语句进行提取以及输出相应的涉及类。本发明解决其技术问题所采用的技术方案是:首先加载Mybatis应用的Class文件;然后对应用的映射文件进行复制,并且记录$方式传入参数的对应文件、MapperID以及相应的$参数,同时发送给JavaAgent拦截器;所述JavaAgent拦截器用于拦截Class文件,以及传过来的变量,将拦截方法植入相应的class文件,无须对工程的所有class文件的所有类方法都进行修改,所述拦截方法的实现功能为:当对象调用被拦截的方法时,该拦截方法将在被拦截的方法执行之前和之后均链式执行预设拦截链中的埋点逻辑;并向Class文件运行模块发送修改后的Class文件;然后接收发送过来的修改后的Class文件,并运行修改后的Class文件,并向发送修改后的Class文件的运行结果;运行修改后的Class文件的运行结果,对Mybatis应用中的映射文件进行复制以及变量值回填,得到完整的sql。
本发明通过JavaAgent拦截器将Class文件拦截,并且根据发送过来的变量信息修改Class文件以得到对应真实变量值的代码,同时运行得到运行结果,然后拷贝Mybatis应用的映射文件,同时对拷贝的映射文件的相应变量进行回填,然后利用xml文件的节点解析方法,对拷贝映射文件中的各节点sql进行解析拼接得到最终完整的sql语句。
本发明的发明人创造性地发现,由于Mybatis应用#动态传参方式很大程度可以防止sql注入,所以$方式只用于传入数据库对象,比如表名,故对动态参数的提取只针对$方式,#方式对后续得到的完整sql与扫描结果没有影响,可以忽略。通过对应用的映射文件进行扫描,记录$方式传入参数的对应文件、MapperID以及相应的$传入的参数。首先对应用的映射文件进行拷贝,避免变量回填时对应用产生影响,同时对拷贝的映射文件的相应变量进行回填,然后利用xml文件的节点解析方法,对拷贝映射文件中的各节点sql进行解析拼接得到最终完整的sql语句。后续只需对拷贝的映射文件进行扫描即可,不会影响原应用的内容。
本发明具有如下优点:
1.通过Java探针工具提高代码的完整性,从而提高后续的静态代码扫描工具的准确率和规则命中率。
2.目前针对mybatis框架的工程中可能存在性能问题的sql只能通过日志进行抓取,但是无法追溯到相应的程序,本发明在保证映射文件中的sql完整性的同时,可以追溯至相应的程序,便于后期的修改。
基于相同的发明构思,本发明还提供一种MyBatis应用程序的SQL提取装置,如图2所示,包括:
埋点逻辑执行模块1,在已设置埋点应用的MyBatis应用程序在加载一加载类之前和之后,均链式执行所述埋点应用的预设拦截链中的埋点逻辑,进而加载修改后的所述加载类;
埋点应用运行模块2,运行添加埋点应用的MyBatis应用程序,替换所述MyBatis应用程序的映射文件中非预编译动态传入的参数,得到最终的映射文件;
解析模块3,对所述映射文件进行解析得到MyBatis应用程序的SQL语句。
本发明提供的一种MyBatis应用程序的SQL提取装置,通过在已设置埋点应用的MyBatis应用程序在加载一加载类之前和之后,均链式执行所述埋点应用的预设拦截链中的埋点逻辑,进而加载修改后的所述加载类;然后运行添加埋点应用的MyBatis应用程序,替换所述MyBatis应用程序的映射文件中非预编译动态传入的参数,得到最终的映射文件;最后对所述映射文件进行解析得到MyBatis应用程序的SQL语句,从而在保证映射文件中的sql完整性的同时,可以追溯至相应的程序,便于后期的修改。
在某些实施例中,还包括:
复制模块,复制MyBatis应用程序的完整映射文件,并记录以非预编译动态传入的映射文件、对应的映射对象标识和传入对象。
在某些实施例中,还包括:
拦截器定义模块,定义方法拦截器,在被拦截的装置的执行前和执行后嵌入埋点逻辑,进而在对象调用被拦截的装置时,将在被拦截的装置执行之前和之后均链式执行预设拦截链中的埋点逻辑;
启动类定义模块,定义实现所述埋点应用的启动类,以使虚拟机在加载各种类之前会将装置拦截器的拦截装置嵌入到被拦截的类中,然后加载修改后的所述加载类。
在某些实施例中,所述启动类定义模块,包括:
启动参数提供单元,通过javaagent选项提供启动参数;
实例创建单元,创建Java虚拟机监控接口的实例。
在某些实施例中,在已设置埋点应用的MyBatis应用程序在加载一加载类之前和之后,均链式执行所述埋点应用的预设拦截链中的埋点逻辑,包括:
在埋点应用中添加定义与设定压缩包相关数据的清单文件,设置其预启动类项为启动类的名称;
将当前埋点应用编译并且打包成压缩包;
在需要埋点的MyBatis应用程序的启动脚本中添加该压缩包的运行命令。
从硬件层面来说,为了本发明提供一种用于实现所述MyBatis应用程序的SQL提取方法中的全部或部分内容的电子设备的实施例,所述电子设备具体包含有如下内容:
处理器(processor)、存储器(memory)、通信接口(Communications Interface)和总线;其中,所述处理器、存储器、通信接口通过所述总线完成相互间的通信;所述通信接口用于实现服务器、装置、分布式消息中间件集群装置、各类数据库以及用户终端等相关设备之间的信息传输;该电子设备可以是台式计算机、平板电脑及移动终端等,本实施例不限于此。在本实施例中,该电子设备可以参照实施例中的MyBatis应用程序的SQL提取方法的实施例,以及,MyBatis应用程序的SQL提取方法装置的实施例进行实施,其内容被合并于此,重复之处不再赘述。
图3为本发明实施例的电子设备9600的系统构成的示意框图。如图3所示,该电子设备9600可以包括中央处理器9100和存储器9140;存储器9140耦合到中央处理器9100。值得注意的是,该图3是示例性的;还可以使用其他类型的结构,来补充或代替该结构,以实现电信功能或其他功能。
一实施例中,MyBatis应用程序的SQL提取方法功能可以被集成到中央处理器9100中。例如,中央处理器9100可以被配置为进行如下控制:
S1:在已设置埋点应用的MyBatis应用程序在加载一加载类之前和之后,均链式执行所述埋点应用的预设拦截链中的埋点逻辑,进而加载修改后的所述加载类;
S2:运行添加埋点应用的MyBatis应用程序,替换所述MyBatis应用程序的映射文件中非预编译动态传入的参数,得到最终的映射文件;
S3:对所述映射文件进行解析得到MyBatis应用程序的SQL语句。
从上述描述可知,本发明的实施例提供的电子设备,通过在已设置埋点应用的MyBatis应用程序在加载一加载类之前和之后,均链式执行所述埋点应用的预设拦截链中的埋点逻辑,进而加载修改后的所述加载类;然后运行添加埋点应用的MyBatis应用程序,替换所述MyBatis应用程序的映射文件中非预编译动态传入的参数,得到最终的映射文件;最后对所述映射文件进行解析得到MyBatis应用程序的SQL语句,从而在保证映射文件中的sql完整性的同时,可以追溯至相应的程序,便于后期的修改。
在另一个实施方式中,MyBatis应用程序的SQL提取方法装置可以与中央处理器9100分开配置,例如可以将MyBatis应用程序的SQL提取方法配置为与中央处理器9100连接的芯片,通过中央处理器的控制来实现MyBatis应用程序的SQL提取方法功能。
如图3所示,该电子设备9600还可以包括:通信模块9110、输入单元9120、音频处理器9130、显示器9160、电源9170。值得注意的是,电子设备9600也并不是必须要包括图3中所示的所有部件;此外,电子设备9600还可以包括图3中没有示出的部件,可以参考现有技术。
如图3所示,中央处理器9100有时也称为控制器或操作控件,可以包括微处理器或其他处理器装置和/或逻辑装置,该中央处理器9100接收输入并控制电子设备9600的各个部件的操作。
其中,存储器9140,例如可以是缓存器、闪存、硬驱、可移动介质、易失性存储器、非易失性存储器或其它合适装置中的一种或更多种。可储存上述与失败有关的信息,此外还可存储执行有关信息的程序。并且中央处理器9100可执行该存储器9140存储的该程序,以实现信息存储或处理等。
输入单元9120向中央处理器9100提供输入。该输入单元9120例如为按键或触摸输入装置。电源9170用于向电子设备9600提供电力。显示器9160用于进行图像和文字等显示对象的显示。该显示器例如可为LCD显示器,但并不限于此。
该存储器9140可以是固态存储器,例如,只读存储器(ROM)、随机存取存储器(RAM)、SIM卡等。还可以是这样的存储器,其即使在断电时也保存信息,可被选择性地擦除且设有更多数据,该存储器的示例有时被称为EPROM等。存储器9140还可以是某种其它类型的装置。存储器9140包括缓冲存储器9141(有时被称为缓冲器)。存储器9140可以包括应用/功能存储部9142,该应用/功能存储部9142用于存储应用程序和功能程序或用于通过中央处理器9100执行电子设备9600的操作的流程。
存储器9140还可以包括数据存储部9143,该数据存储部9143用于存储数据,例如联系人、数字数据、图片、声音和/或任何其他由电子设备使用的数据。存储器9140的驱动程序存储部9144可以包括电子设备的用于通信功能和/或用于执行电子设备的其他功能(如消息传送应用、通讯录应用等)的各种驱动程序。
通信模块9110即为经由天线9111发送和接收信号的发送机/接收机9110。通信模块(发送机/接收机)9110耦合到中央处理器9100,以提供输入信号和接收输出信号,这可以和常规移动通信终端的情况相同。
基于不同的通信技术,在同一电子设备中,可以设置有多个通信模块9110,如蜂窝网络模块、蓝牙模块和/或无线局域网模块等。通信模块(发送机/接收机)9110还经由音频处理器9130耦合到扬声器9131和麦克风9132,以经由扬声器9131提供音频输出,并接收来自麦克风9132的音频输入,从而实现通常的电信功能。音频处理器9130可以包括任何合适的缓冲器、解码器、放大器等。另外,音频处理器9130还耦合到中央处理器9100,从而使得可以通过麦克风9132能够在本机上录音,且使得可以通过扬声器9131来播放本机上存储的声音。
本发明的实施例还提供能够实现上述实施例中的执行主体可以为服务器的MyBatis应用程序的SQL提取方法中全部步骤的一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现上述实施例中的MyBatis应用程序的SQL提取方法的全部步骤。
从上述描述可知,本发明的实施例提供的计算机可读存储介质,通过在已设置埋点应用的MyBatis应用程序在加载一加载类之前和之后,均链式执行所述埋点应用的预设拦截链中的埋点逻辑,进而加载修改后的所述加载类;然后运行添加埋点应用的MyBatis应用程序,替换所述MyBatis应用程序的映射文件中非预编译动态传入的参数,得到最终的映射文件;最后对所述映射文件进行解析得到MyBatis应用程序的SQL语句,从而在保证映射文件中的sql完整性的同时,可以追溯至相应的程序,便于后期的修改。
本领域内的技术人员应明白,本发明的实施例可提供为方法、装置、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(装置)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
本发明中应用了具体实施例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (10)
1.一种MyBatis应用程序的SQL提取方法,其特征在于,包括:
在已设置埋点应用的MyBatis应用程序在加载一加载类之前和之后,均链式执行所述埋点应用的预设拦截链中的埋点逻辑,进而加载修改后的所述加载类;
运行添加埋点应用的MyBatis应用程序,替换所述MyBatis应用程序的映射文件中非预编译动态传入的参数,得到最终的映射文件;
对所述映射文件进行解析得到MyBatis应用程序的SQL语句;
还包括:
复制MyBatis应用程序的完整映射文件,并记录以非预编译动态传入的映射文件、对应的映射对象标识和传入对象;
所述替换所述MyBatis应用程序的映射文件中非预编译动态传入的参数,得到最终的映射文件,包括:
捕获涉及所述映射文件的MapperId以及传入对象,判断是否存在所述以非预编译动态传入的映射文件、对应的映射对象标识和传入对象;
若存在,则对相应的映射文件中的参数字符串进行替换并保存;
所述对所述映射文件进行解析得到MyBatis应用程序的SQL语句,包括:
对所述映射文件的相应变量进行回填;
利用xml文件的节点解析方法,对所述映射文件中的各节点sql进行解析拼接得到MyBatis应用程序的SQL语句。
2.根据权利要求1所述的SQL提取方法,其特征在于,还包括:
定义方法拦截器,在被拦截的方法的执行前和执行后嵌入埋点逻辑,进而在对象调用被拦截的方法时,将在被拦截的方法执行之前和之后均链式执行预设拦截链中的埋点逻辑;
定义实现所述埋点应用的启动类,以使虚拟机在加载各种类之前会将方法拦截器的拦截方法嵌入到被拦截的类中,然后加载修改后的所述加载类。
3.根据权利要求2所述的SQL提取方法,其特征在于,所述定义实现所述埋点应用的启动类,包括:
通过javaagent选项提供启动参数;
创建Java虚拟机监控接口的实例。
4.根据权利要求1所述的SQL提取方法,其特征在于,在已设置埋点应用的MyBatis应用程序在加载一加载类之前和之后,均链式执行所述埋点应用的预设拦截链中的埋点逻辑,包括:
在埋点应用中添加定义与设定压缩包相关数据的清单文件,设置其预启动类项为启动类的名称;
将当前埋点应用编译并且打包成压缩包;
在需要埋点的MyBatis应用程序的启动脚本中添加该压缩包的运行命令。
5.一种MyBatis应用程序的SQL提取装置,其特征在于,包括:
埋点逻辑执行模块,在已设置埋点应用的MyBatis应用程序在加载一加载类之前和之后,均链式执行所述埋点应用的预设拦截链中的埋点逻辑,进而加载修改后的所述加载类;
埋点应用运行模块,运行添加埋点应用的MyBatis应用程序,替换所述MyBatis应用程序的映射文件中非预编译动态传入的参数,得到最终的映射文件;
解析模块,对所述映射文件进行解析得到MyBatis应用程序的SQL语句;
还包括:
复制模块,复制MyBatis应用程序的完整映射文件,并记录以非预编译动态传入的映射文件、对应的映射对象标识和传入对象;
所述埋点应用运行模块,捕获涉及所述映射文件的MapperId以及传入对象,判断是否存在所述以非预编译动态传入的映射文件、对应的映射对象标识和传入对象;若存在,则对相应的映射文件中的参数字符串进行替换并保存;
所述解析模块,对所述映射文件的相应变量进行回填;利用xml文件的节点解析方法,对所述映射文件中的各节点sql进行解析拼接得到MyBatis应用程序的SQL语句。
6.根据权利要求5所述的SQL提取装置,其特征在于,还包括:
拦截器定义模块,定义方法拦截器,在被拦截的装置的执行前和执行后嵌入埋点逻辑,进而在对象调用被拦截的装置时,将在被拦截的装置执行之前和之后均链式执行预设拦截链中的埋点逻辑;
启动类定义模块,定义实现所述埋点应用的启动类,以使虚拟机在加载各种类之前会将装置拦截器的拦截装置嵌入到被拦截的类中,然后加载修改后的所述加载类。
7.根据权利要求6所述的SQL提取装置,其特征在于,所述启动类定义模块,包括:
启动参数提供单元,通过javaagent选项提供启动参数;
实例创建单元,创建Java虚拟机监控接口的实例。
8.根据权利要求5所述的SQL提取装置,其特征在于,在已设置埋点应用的MyBatis应用程序在加载一加载类之前和之后,均链式执行所述埋点应用的预设拦截链中的埋点逻辑,包括:
在埋点应用中添加定义与设定压缩包相关数据的清单文件,设置其预启动类项为启动类的名称;
将当前埋点应用编译并且打包成压缩包;
在需要埋点的MyBatis应用程序的启动脚本中添加该压缩包的运行命令。
9.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至4任一所述方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有执行权利要求1至4任一所述方法的计算机程序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010821261.5A CN111949491B (zh) | 2020-08-14 | 2020-08-14 | MyBatis应用程序的SQL提取方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010821261.5A CN111949491B (zh) | 2020-08-14 | 2020-08-14 | MyBatis应用程序的SQL提取方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111949491A CN111949491A (zh) | 2020-11-17 |
CN111949491B true CN111949491B (zh) | 2023-10-27 |
Family
ID=73342473
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010821261.5A Active CN111949491B (zh) | 2020-08-14 | 2020-08-14 | MyBatis应用程序的SQL提取方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111949491B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114296734A (zh) * | 2021-12-23 | 2022-04-08 | 广东悦伍纪网络技术有限公司 | Sql语句解析方法、装置、计算机设备和存储介质 |
CN116644425B (zh) * | 2022-04-02 | 2024-02-20 | 港珠澳大桥管理局 | 基于Javaagent的Web漏洞即时阻断方法、装置、设备和存储介质 |
CN114756554B (zh) * | 2022-06-13 | 2022-09-30 | 中建电子商务有限责任公司 | 一种基于MyBatis框架的数据查询处理方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108121542A (zh) * | 2017-11-17 | 2018-06-05 | 广东睿江云计算股份有限公司 | 一种基于MyBatis的SQL语句的配置方法、系统 |
CN110555030A (zh) * | 2018-03-28 | 2019-12-10 | 北京京东尚科信息技术有限公司 | 一种sql语句的处理方法和装置 |
CN111078504A (zh) * | 2019-12-25 | 2020-04-28 | 深圳前海环融联易信息科技服务有限公司 | 一种分布式调用链跟踪方法、装置、计算机设备及存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9141415B2 (en) * | 2010-11-16 | 2015-09-22 | Syddansk Universitet | Method for dynamically transforming the bytecode of Java virtual machine bootstrap classes |
-
2020
- 2020-08-14 CN CN202010821261.5A patent/CN111949491B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108121542A (zh) * | 2017-11-17 | 2018-06-05 | 广东睿江云计算股份有限公司 | 一种基于MyBatis的SQL语句的配置方法、系统 |
CN110555030A (zh) * | 2018-03-28 | 2019-12-10 | 北京京东尚科信息技术有限公司 | 一种sql语句的处理方法和装置 |
CN111078504A (zh) * | 2019-12-25 | 2020-04-28 | 深圳前海环融联易信息科技服务有限公司 | 一种分布式调用链跟踪方法、装置、计算机设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN111949491A (zh) | 2020-11-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111949491B (zh) | MyBatis应用程序的SQL提取方法及装置 | |
CN108228188B (zh) | 一种视图组件处理方法、电子设备及可读存储介质 | |
US7165191B1 (en) | Automated verification of user interface tests on low-end emulators and devices | |
US7840943B2 (en) | Method and apparatus for transferring data in a distributed testing system | |
CN111797015B (zh) | 一种基于动态字节码的测试方法及装置 | |
CN110659206B (zh) | 基于微服务的模拟架构建立方法、装置、介质及电子设备 | |
US9182953B2 (en) | Hybrid dynamic code compiling device, method, and service system thereof | |
US20150089474A1 (en) | Runtime generation and injection of java annotations | |
CN111737140A (zh) | 接口自动化测试方法、装置、设备及计算机可读存储介质 | |
US11436066B2 (en) | System for offline object based storage and mocking of rest responses | |
CN112615759B (zh) | 全链路压测组件、全链路压测方法及装置 | |
CN110532182B (zh) | 一种虚拟化平台的自动化测试方法及装置 | |
CN110297643B (zh) | 应用程序注入动态库的方法、装置、设备及存储介质 | |
KR20050010851A (ko) | 휴대용 장치에서 멀티미디어 렌더링하는 시스템 | |
EP3797356B1 (en) | Code base sharing between standalone and web-based versions of an application due to the implementing of an emulated network communication channel | |
CN112860585B (zh) | 一种测试脚本断言生成方法及装置 | |
CN113741954A (zh) | 系统软件生成方法、装置、电子设备及存储介质 | |
CN113419738A (zh) | 接口文档的生成方法、装置及接口管理设备 | |
CN115080114B (zh) | 应用程序的移植处理方法、装置和介质 | |
US20100281403A1 (en) | Browser program and terminal device | |
CN115982257A (zh) | 接口创建方法以及相关设备 | |
CN114398152A (zh) | 接口仿真服务调用方法及装置 | |
CN112306844B (zh) | 软件开发系统的接口测试方法、装置、设备及存储介质 | |
CN102148755A (zh) | 大型机注入组件和仿真器与大型机间传输的分组的操纵法 | |
CN107436899A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |