CN110262787B - 语句替换方法、装置和电子设备 - Google Patents
语句替换方法、装置和电子设备 Download PDFInfo
- Publication number
- CN110262787B CN110262787B CN201910543151.4A CN201910543151A CN110262787B CN 110262787 B CN110262787 B CN 110262787B CN 201910543151 A CN201910543151 A CN 201910543151A CN 110262787 B CN110262787 B CN 110262787B
- Authority
- CN
- China
- Prior art keywords
- statement
- target
- replacement
- preset
- annotation
- 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
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
-
- 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/33—Intelligent editors
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明提供一种语句替换方法,包括:通过调用预设的拦截接口,拦截数据库中符合预设拦截条件的目标对象,将符合预设拦截条件的目标对象进行拦截后,对所述目标对象进行解析,得到目标语句,判断所述目标语句是否满足进行语句替换的条件,若满足语句替换的条件,则获取对应的替换策略,并将所述目标语句中进行替换的内容与所述替换策略中的语句进行替换,通过应用本发明提供的方法,减少了开发人员重复编写代码的工作,提高开发人员的工作效率,以及降低了数据库系统的开发难度。
Description
技术领域
本发明涉及计算机领域,特别涉及一种语句替换方法、装置和电子设备。
背景技术
数据库中的数据以表的形式进行保存,当表中的数据量过大时,此时对数据库的操作将十分耗时。为了提高对数据库的访问效率和减少对数据库的访问时间,开发人员应用MyBatis持久层框架对数据库中的数据开发出了分库分表架构,用以减少数据库中表的体量,提高对数据库的访问效率。
开发人员在应用MyBatis持久层框架对数据库进行开发时,通常应用拦截器进行系统的开发,拦截器可以在某个方法或对象被访问之前,进行拦截,通过应用StatementHandler对拦截的语句进行处理,在所拦截的对象之前或之后加入某些代码,以实现对应的操作;数据库通过应用分库分表架构进行保存数据,开发人员难以在此架构上加入对应的代码,使开发人员的在加入编写代码的工作上更加的繁琐和复杂。
发明内容
有鉴于此,本发明实施例提供,一种语句替换方法,可应用于MyBatis持久层框架中,通过应用本发明实施例提供的语句替换方法,简化了开发人员在开发分库分表架构对应的数据库系统的代码编写,通过简化了代码的编写,提高了开发人员的工作效率。
为实现上述的目的,本发明实施例提供如下技术方案:
一种语句替换方法,包括:
调用预设的拦截接口,并依据所述拦截接口中的预设拦截条件,拦截符合所述预设拦截条件的目标对象;
对所述目标对象进行解析,得到所述目标对象中的第一目标语句和第二目标语句;
判断所述第一目标语句中是否存在预设的替换标注,若所述第一目标语句中存在所述预设的替换标注,则获取与所述预设的替换标注对应的第一替换策略;
将所述第一替换策略中的各个语句与所述第一目标语句中与所述预设的替换标注所对应的内容进行替换,生成新的第一目标语句,并执行所述新的第一目标语句;
判断所述第二目标语句中是否存在预设的第一替换注解,若所述第二目标语句中存在所述预设的第一替换注解,则获取与所述预设的第一替换注解对应的第二替换策略;
将所述第二替换策略中的各个语句与所述第二目标语句中与所述预设的第一替换注解所对应的内容进行替换,生成新的第二目标语句,并执行所述新的第二目标语句。
上述的方法,可选的,所述对所述目标对象进行解析,得到所述目标对象中的第一目标语句和第二目标语句,包括:
调用预设的解析方法对所述目标对象进行解析,得到对所述目标对象进行解析后的内容;
确定所述第一目标语句的第一语句属性,和所述第二目标语句的第二语句属性;
依据所述第一语句属性,得到对所述目标语句解析得到的内容中与所述第一语句属性相对应的第一目标语句;
依据所述第二语句属性,得到对所述目标语句解析得到的内容中与所述第二语句属性相对应的第二目标语句。
上述的方法,可选的,还包括:
若所述第二目标语句中不存在预设的第一替换注解,则获取与所述第二目标语句对应的映射语句;
判断所述映射语句中是否存在预设的第二替换注解,若所述映射语句中存在所述预设的第二替换注解,则获取与所述预设的第二替换注解对应的第三替换策略;
将所述第三替换策略中的各个语句与所述预设映射语句中与所述第二替换注解所对应的内容进行替换,生成新的映射语句,并执行所述新的映射语句。
上述的方法,可选的,所述将所述第一替换策略中的各个语句与所述第一目标语句中与所述预设的替换标注所对应的内容进行替换,包括:
确定所述预设的替换标注中的标注内容,查找所述第一目标语句中与所述标注内容相对应的内容;
调用预设的转换接口,通过所述转换接口将所述第一替换策略中的各个语句覆盖所述第一目标语句中与所述标注内容相对应的内容。
上述的方法,可选的,还包括:
获取所述第一替换策略中预设的第一策略参数,依据所述第一策略参数修改所述解析方法中预设的解析参数。
上述的方法,可选的,所述依据所述拦截接口中的预设拦截条件,拦截符合所述预设拦截条件的目标对象,包括:
判断所述目标对象的执行方法;
若所述目标对象的执行方法为第一执行方法,则所述目标对象符合预设拦截条件,对所述目标对象进行拦截;
若所述目标对象的执行方法为第二执行方法,则判断所述目标对象是否为操作类型对象;
若所述目标对象为所述操作类型对象,则对所述目标对象进行封装,生成符合预设拦截条件的目标代理,并对所述目标代理进行拦截。
一种语句替换装置,包括:
调用单元,用于调用预设的拦截接口,并依据所述拦截接口中的预设拦截条件,拦截符合所述预设拦截条件的目标对象;
解析单元,用于对所述目标对象进行解析,得到所述目标对象中的第一目标语句和第二目标语句;
第一判断单元,用于判断所述第一目标语句中是否存在预设的替换标注,若所述第一目标语句中存在所述预设的替换标注,则获取与所述预设的替换标注对应的第一替换策略;
第一执行单元,用于将所述第一替换策略中的各个语句与所述第一目标语句中与所述预设的替换标注所对应的内容进行替换,生成新的第一目标语句,并执行所述新的第一目标语句;
第二判断单元,用于判断所述第二目标语句中是否存在预设的第一替换注解,若所述第二目标语句中存在所述预设的第一替换注解,则获取与所述预设的第一替换注解对应的第二替换策略;
第二执行单元,用于将所述第二替换策略中的各个语句与所述第二目标语句中与所述预设的第一替换注解所对应的内容进行替换,生成新的第二目标语句,并执行所述新的第二目标语句。
上述的装置,可选的,所述解析单元,包括:
调用子单元,用于调用预设的解析方法对所述目标对象进行解析,得到对所述目标对象进行解析后的内容;
确定子单元,用于确定所述第一目标语句的第一语句属性,和所述第二目标语句的第二语句属性;
第一获取子单元,用于依据所述第一语句属性,得到对所述目标语句解析得到的内容中与所述第一语句属性相对应的第一目标语句;
第二获取子单元,用于依据所述第二语句属性,得到对所述目标语句解析得到的内容中与所述第二语句属性相对应的第二目标语句。
上述的装置,可选的,还包括:
获取单元,用于若所述第二目标语句中不存在预设的第一替换注解,则获取与所述第二目标语句对应的映射语句;
第三判断单元,用于判断所述映射语句中是否存在预设的第二替换注解,若所述映射语句中存在所述预设的第二替换注解,则获取与所述预设的第二替换注解对应的第三替换策略;
第三执行单元,用于将所述第三替换策略中的各个语句与所述预设映射语句中与所述第二替换注解所对应的内容进行替换,生成新的映射语句,并执行所述新的映射语句。
上述的装置,可选的,所述第一执行单元,包括:
查找子单元,用于确定所述预设的替换标注中的标注内容,查找所述第一目标语句中与所述标注内容相对应的内容;
覆盖子单元,用于调用预设的转换接口,通过所述转换接口将所述第一替换策略中的各个语句覆盖所述第一目标语句中与所述标注内容相对应的内容。
上述的装置,可选的,还包括:
修改子单元,用于获取所述第二替换策略中预设的第一策略参数,依据所述第一策略参数修改所述解析方法中预设的解析参数。
上述的装置,可选的,所述调用单元,包括:
第一判断子单元,用于判断所述目标对象的执行方法;
第一拦截子单元,用于若所述目标对象的执行方法为第一执行方法,则所述目标对象符合预设拦截条件,对所述目标对象进行拦截;
第二判断子单元,用于若所述目标对象的执行方法为第二执行方法,则判断所述目标对象是否为操作类型对象;
第二拦截子单元,用于若所述目标对象为所述操作类型对象,则对所述目标对象进行封装,生成符合预设拦截条件的目标代理,并对所述目标代理进行拦截。
一种电子设备,包括存储器,以及一个或者一个以上的程序,其中一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器执行上所述的语句替换方法。
与现有技术相比,本发明包括以下优点:
通过调用预设的拦截接口,依据所述拦截接口中的预设拦截条件,拦截符合所述拦截条件的目标对象;对所述目标对象进行解析,得到所述目标对象中的第一目标语句和第二目标语句;判断所述第一目标语句中是否存在预设的替换标注,若所述第一目标语句中存在所述预设的替换标注,则获取与所述预设的替换标注对应的第一替换策略;将所述第一替换策略中的各个语句与所述第一目标语句中与所述预设的替换标注所对应的内容进行替换,生成新的第一目标语句,并执行所述新的第一目标语句;判断所述第二目标语句中是否存在预设的第一替换注解,若所述第二目标语句中存在所述预设的第一替换注解,则获取与所述预设的第一替换注解对应的第二替换策略;将所述第二替换策略中的各个语句与所述第二目标语句中与所述预设的第一替换注解所对应的内容进行替换,生成新的第二目标语句,并执行所述新的第二目标语句。通过应用本发明实施例提供的方法,可以将目标对象拦截后,对所述目标对象进行解析,得到目标语句后判断是否满足进行语句替换的条件,若满足语句替换的条件,则获取对应的替换策略,并将所述目标语句中进行替换的内容与所述替换策略中的语句进行替换,减少了开发人员重复编写代码的工作,提高了开发人员的工作效率,以及降低了数据库系统的开发难度。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本发明实施例提供的一种语句替换方法的方法流程图;
图2为本发明实施例提供的一种语句替换方法的另一方法流程图;
图3为本发明实施例提供的一种语句替换方法的另一方法流程图;
图4为本发明实施例提供的一种语句替换装置的结构示意图;
图5为本发明实施例提供的一种电子设备的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本申请中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本发明可以应用于众多通用或专用的计算装置环境或配置中。例如:个人计算机、服务器计算机、多处理器装置、包括以上任何装置或设备的分布式计算环绕环境等。
本发明实施例提供了一种语句替换方法,该方法可以应用于支持MyBatis持久层框架的数据库中,可应用本发明提供的方法对数据库系统的系统进行开发,降低系统开发难度和简化开发人员对编写代码的工作,本发明实施例提供的方法中,其执行主体可以为MyBatis拦截器中的分表拦截器,所述分表拦截器在对数据库中的目标对象进行拦截时,需要继承拦截接口interceptor;本发明的方法流程可参照图1,具体包括:
S101、调用预设的拦截接口,并依据所述拦截接口中的预设拦截条件,拦截符合所述预设拦截条件的目标对象。
本发明实施例提供的方法中,调用预设的拦截接口,需要说明的是,所述预设的拦截接口可以为拦截器对应的拦截接口,例如分表拦截器中设置的拦截接口为interceptor,每种接口都会设置有对应的拦截方法,所述拦截方法为预设拦截条件;通过拦截接口中预设的拦截条件拦截符合所述预设拦截条件的目标对象,需要说明的是,所述目标对象可以为编程、语句、分表或是数据。
S102、对所述目标对象进行解析,得到所述目标对象中的第一目标语句和第二目标语句。
本发明实施例提供的方法中,调用预设的解析方法对拦截得到的所述目标对象进行解析,得到所述目标对象中的第一目标语句和第二目标语句;需要说明的是,所述第一目标语句和所述第二目标语句所对应的属性不相同。
S103、判断所述第一目标语句中是否存在预设的替换标注,若所述第一目标语句中存在所述预设的替换标注,则获取与所述预设的替换标注对应的第一替换策略。
本发明实施例提供的方法中,将解析得到的第一目标语句进行判断,判断所述第一目标语句中是否存在预设的替换标注,需要说明的是,所述替换标注中包含被替换的内容;若存在所述替换标注,则获取与所述替换标注对应的第一替换策略,所述替换策略中包含进行替换的内容;需要说明的是,所述替换标注可以为@{b},其中b为所述第一目标语句中被替换的内容;所述第一替换策略可以为{123},其中123为进行替换的内容;需要说明的是,所述替换标注中可以包含多条语句或者是数据,同理所述第一替换策略中包含与所述替换标注所对应的替换内容。
S104、将所述第一替换策略中的各个语句与所述第一目标语句中与所述预设的替换标注所对应的内容进行替换,生成新的第一目标语句,并执行所述新的第一目标语句。
本发明实施提供的方法中,当确定所述第一目标语句中替换标注所对应的替换内容,以及与所述替换标注对应的第一替换策略中的替换内容之后,将所述第一目标语句中与所述替换标注中相对应的内容,和所述第一替换策略中的内容进行提换,得到替换后生成的新的第一目标语句,执行所述新的第一目标语句。
需要说明的是,当所述第一目标语句中不存在所述替换标注时,则将所述第一目标语句放行或者是执行所述第一目标语句。
S105、判断所述第二目标语句中是否存在预设的第一替换注解,若所述第二目标语句中存在所述预设的第一替换注解,则获取与所述预设的第一替换注解对应的第二替换策略。
本发明实施例提供的方法中,判断所述第二目标语句中是否存在预设的第一替换注解,若存在所述第一替换注解,则获取与所述第一替换注解对应的第二替换策略;
需要说明的是,所述第一替换注解和所述替换标注不相同,其作用虽都是对语句进行标注,但其进行标注的语句不同,所述替换标注只能标注在所述第一目标语句中,所述第一替换注解只能标注于所述第二目标语句中,所述第二目标语句可以为程序中的类或者为系统框架中的接口。
S106、将所述第二替换策略中的各个语句与所述第二目标语句中与所述预设的第一替换注解所对应的内容进行替换,生成新的第二目标语句,并执行所述新的第二目标语句。
本发明实施例提供的方法中,确定所述第二目标语句中与所述第一替换注解中对应的替换内容,确定所述第一替换策略中进行替换的内容,将所述第一替换策略中的内容与所述第二目标语句中与所述第一替换注解中对应的内容进行替换,生成新的第二目标语句,并执行所述新的第二目标语句。
本发明实施例提供的方法中,通过对拦截的目标对象进行解析,得到与解析条件相符的目标语句,判断所述目标语句是否符合预设的替换条件,将符合预设的替换条件的目标语句中的内容进行替换,生成新的目标语句,并执行新的目标语句;由此降低了开发人员编写程序代码的工作量,提高开发人员的工作效率,降低了系统的开发难度。
本发明实施例提供的方法中,在判断所述第二目标语句中是否存在预设的第一替换注解时,若所述第二目标语句不存在预设的第一替换注解时,则获取与所述第二目标语句对应的映射语句,并判断所述映射语句中是否存在预设的第二替换注解,判断的具体过程如下所述:
若所述第二目标语句中不存在预设的第一替换注解,则获取与所述第二目标语句对应的映射语句;
本发明实施提供的方法中,若所述第二目标语句中不存在预设的第一替换注解,依据所述第二目标语句的属性,获取与所述第二目标语句对应的映射语句,例如,当所述第二目标语句为Mapper类语句,则反射Mapper父类BaseMapper,此时父类BaseMapper即为所述Mapper类语句的映射语句。
判断所述映射语句中是否存在预设的第二替换注解,若所述映射语句中存在所述预设的第二替换注解,则获取与所述预设的第二替换注解对应的第三替换策略;
本发明实施例提供的方法中,获取到与所述第二目标语句对应的映射语句之后,判断所述映射语句中是否存在预设的第二替换注解,需要说明的是,所述第二替换注解和所述第一替换注解相同,但是其所对应的替换内容和替换策略不相同,例如所述第一替换注解为@TableSplit(strategy=StratergyEnum.CITY),其替换的内容为“CTTY”;第二替换注解为@TableSplit(strategy=StratergyEnum.TOWN),其替换的内容为“TOWN”。
将所述第三替换策略中的各个语句与所述预设映射语句中与所述第二替换注解所对应的内容进行替换,生成新的映射语句,并执行所述新的映射语句;
本发明实施例提供的方法中,确定第三替换策略中的替换内容,确定所述映射语句中与所述第二替换注解中对应的替换内容,将所述第三替换策略中的替换内容与所述映射语句中所需的替换内容进行替换。
本发明实施例提供的方法中,语句进行替换的具体过程如下所述:
确定所述预设的替换标注中的标注内容,查找所述第一目标语句中与所述标注内容相对应的内容;
调用预设的转换接口,通过所述转换接口将所述第一替换策略中的各个语句覆盖所述第一目标语句中与所述标注内容相对应的内容。
需要说明的是,针对所述第二目标语句中的替换内容的过程具体如下所述:
确定所述预设的第一替换注解中的注解内容,查找所述第二目标语句中与所述注解内容相对应的内容;
调用预设的转换接口,通过所述转换接口将所述第二替换策略中的各个语句覆盖所述第二目标语句中与所述注解内容相对应的内容。
需要说明的是,针对所述映射语句中的替换内容的过程具体如下所述:
确定所述预设的第二替换注解中的注解内容,查找所述映射语句中与所述注解内容相对应的内容;
调用预设的转换接口,通过所述转换接口将所述第三替换策略中的各个语句覆盖所述映射语句中与所述注解内容相对应的内容。
需要说明的是,所述第一目标语句、第二目标语句和映射语句在与对应的替换策略中的内容替换时所调用预设的转换接口均为同一转换接口,所述转换接口可以为convert转换接口。
本发明实施例提供的方法中,拦截到对应的目标对象之后,对所述目标对象进行解析,以得到所述第一目标语句和第二目标语句,对所述目标对象的具体解析过程可参照图2,针对图2进行以下说明:
S201、调用预设的解析方法对所述目标对象进行解析,得到对所述目标对象进行解析后的内容。
本发明实施例提供的方法中,调用预设的解析方法对所述目标对象进行解析,所述预设的解析方法可以为MyBatis拦截器中的StatementHandler,需要说明的是,所述StatementHandler为拦截sql语法构建的处理类,使用所述StatementHandler对所述目标语句进行解析,得到解析的内容。
S202、确定所述第一目标语句的第一语句属性,和所述第二目标语句的第二语句属性。
本发明实施例提供的方法中,确定第一目标语句的第一语句属性,例如所述第一目标语句为原始sql语句,则所述第一语句属性为关于原始sql语句属性;第二目标语句为Mapper类,则第二语句属性为关于Mapper类的属性。
S203、依据所述第一语句属性,得到对所述目标语句解析得到的内容中与所述第一语句属性相对应的第一目标语句。
S204、依据所述第二语句属性,得到对所述目标语句解析得到的内容中与所述第二语句属性相对应的第二目标语句。
本发明实施例提供的方法中,依据第一语句属性和所述第二语句属性,分别获得第一目标语句和第二目标语句,需要说明的是,所述第一目标语句为所述目标对象中的原始sql语句,所述第二目标语句为所述目标对象中的Mapper类。
本发明实施例提供的方法中,对所述目标对象解析得到对应的目标语句之后,并判断所述目标语句是否符合替换的条件,若符合预设的替换条件,则将所述目标语句中的内容对应的进行替换,进行替换之后需要对预设的解析方法中的解析参数进行修改,修改的过程如下:
当所述第一目标语句中需要进行替换的内容进行替换之后,对所述预设的解析方法中的解析参数进行修改的过程如下:
获取所述第一替换策略中预设的第一策略参数,依据所述第二策略参数修改所述解析方法中预设的解析参数。
当所述第二目标语句中需要进行替换的内容进行替换之后,对所述预设的解析方法中的解析参数进行修改的过程如下:
获取所述第二替换策略中预设的第二策略参数,依据所述第一策略参数修改所述解析方法中预设的解析参数。
当所述映射语句中需要进行替换的内容进行替换之后,对所述预设的解析方法中的解析参数进行修改的过程如下:
获取所述第三替换策略中预设的第三策略参数,依据所述第一策略参数修改所述解析方法中预设的解析参数。
需要说明的是,在对所述预设解析方法中的解析参数进行修改时,可以同时依据所述第一替换策略中的第一策略参数和所述第二替换策略中的第二策略参数对所述解析参数进行修改,也可以同时依据所述第一替换策略中的第一策略参数和所述第三替换策略中的第三策略参数对所述解析参数进行修改。
需要说明的是,对所述预设的解析方法中的参数进行解析解析之后,解析参数进行修改后的解析方法可应用于下一个分表拦截器中。
本发明实施例提供的方法中,通过修改所述预设解析方法中的在拦截符合预设拦截条件的目标对象的具体过程如图3所示,具体流程如下所述:
S301、判断所述目标对象的执行方法。
本发明实施例提供的方法中,在判断目标对象的执行方法之前,分表拦截器TableSplitInterceptor需要继承拦截接口,所述拦截接口可以为interceptor,分表拦截器继承拦截接后之后对目标对象进行拦截,判断所述目标对象的执行方法。
S302、若所述目标对象的执行方法为第一执行方法,则所述目标对象符合预设拦截条件,对所述目标对象进行拦截。
需要说明的是,所述第一拦截方法可以为intercept方法的,当所述目标对象的执行方法为intercept方法时,则对所述目标对象进行拦截,所述目标对象可以为数据库中的类、数据、编程中的实体或是程序。
S303、若所述目标对象的执行方法为第二执行方法,则判断所述目标对象是否为操作类型对象。
需要说明的是,所述第二执行方法可以为plugin,当所述目标对象为plugin时,则判断所述目标对象中是否为StatementHandlerler操作类,当所述目标对象为StatementHandlerler操作类时,则对所述目标对象进行封装,生成新的目标代理;当所述目标对象不为StatementHandlerler操作类时,将所述目标对象放行。
S304、若所述目标对象为所述操作类型对象,则对所述目标对象进行封装,生成符合预设拦截条件的目标代理,并对所述目标代理进行拦截。
需要说明的是,判断所述目标代理是否可以执行intercept方法,若所述目标代理可以执行intercept方法,则对所述目标代理进行拦截。
本发明实施例提供的方法中,分表拦截器通过继承interceptor拦截接口,并依据所述拦截接口中预设拦截方法,对数据库中符合预设拦截方法的目标对象进行拦截,并对所述目标对象进行解析,得到目标语句,并判断所述目标语句是否符合替换条件,则将所述目标语句中需要替换的内容进行替换,形成新的语句,并执行新的语句,以此减少了开发人员编写代码的重复性,提高了开发人员的编写程序的效率,降低了系统的开发难度。
本发明实施例提供的方法中,在设置替换策略时,可以通过stategy接口进行设置不同的替换策略,在需要增加替换策略时,继承stategy接口,定义分表模板SPLIT_TABLE_TEMPLATE,通过convert接口对分表模板进行重写;
例如在房地产中的挂牌业务房源相关数据库表中,通过城市简称进行分表的,比如Hsale_bj,Hlease_tj等,定义与所述分表相关的定义模板为{city},代替bj,tj等城市简称;替换策略设置简称的方式有两种,(1)从方法参数中设置,定义参数名cityShortlInDb,参数赋值为城市简称;(2)从ThreadLocal中赋值,定义了SplitStrategyCityShortInDBContexHolder提供此处操作的城市简称;替换策略的使用方法:在Mapper或数据库实体entity上打上替换注解,所述替换注解可以为@TableSplit(strategy=StrategyEnum.CITY),在数据库实体entity上的表名注解上定义分表模板,如:@TableName("HSale_{city}");需要说明的是,所述@TableSplit与所述第一替换注解和所述第二替换注解相对应,所述@TableName与所述替换标注相对应,部分相关的程序如下所示:
针对该实体的数据库操作,在执行baseMapper的方法前,设置分表城市简称值,部分程序如下所述:
例如关于取余分表的替换策略的设置,具体过程如下所述:
在日常的数据库分表还有一种是根据表的某个字段值,进行取余操作,如表:HouseTagRelation_01,是利用该表字段AgentId值,对100取余后的余数进行分表的,定义模板为:{num},代替01这种取余之后的值,替换策略需要确认被取余的字段是哪一个,设置取余字段有两种方法:(1)从方法参数中设置,策略中提供了field参数,传入实体对象中作为被取余字段的名称,部分程序如下所述:
(2)从ThreadLocal中赋值,定义了
SplitStrategyMODFieldValueContextHolder提供此次操作的被取余字段。如:
SplitStrategyMODFieldValueContextHolder.setMODFieldValue(agentId.toString());该替换策略的的使用方法为:在mapper或数据库实体entity上打上替换注解:@TableSplit(strategy=StrategyEnum.MODBYID,field=MODFieldEnum.AGENTID,num=MODNumEnum.MOD_10);在数据库实体entity上的表名注解上定义分表模板,如:
@TableName("HouseTagRelation_{num}"),其中field为被取余字段;Num为取余的MOD值,目前有除数有10,100,1000三种值,部分程序具体如下:
通过应用本发明实施例提供的方法,通过调用预设的拦截接口,依据所述拦截接口中的预设拦截条件,拦截符合所述拦截条件的目标对象;对所述目标对象进行解析,得到所述目标对象中的第一目标语句和第二目标语句;判断所述第一目标语句中是否存在预设的替换标注,若所述第一目标语句中存在所述预设的替换标注,则获取与所述预设的替换标注对应的第一替换策略;将所述第一替换策略中的各个语句与所述第一目标语句中与所述预设的替换标注所对应的内容进行替换,生成新的第一目标语句,并执行所述新的第一目标语句;判断所述第二目标语句中是否存在预设的第一替换注解,若所述第二目标语句中存在所述预设的第一替换注解,则获取与所述预设的第一替换注解对应的第二替换策略;将所述第二替换策略中的各个语句与所述第二目标语句中与所述预设的第一替换注解所对应的内容进行替换,生成新的第二目标语句,并执行所述新的第二目标语句。通过应用本发明实施例提供的方法,可以将目标对象拦截后,对所述目标对象进行解析,得到目标语句后判断是否满足进行语句替换的条件,若满足语句替换的条件,则获取对应的替换策略,并将所述目标语句中进行替换的内容与所述替换策略中的语句进行替换,简化了开发人员编写代码的重复性,以及降低了数据库系统的开发难度。
与图1相对应的,本发明实施例还提供了一种语句替换装置,具体的装置结构图如图4所示;
调用单元601,用于调用预设的拦截接口,并依据所述拦截接口中的预设拦截条件,拦截符合所述预设拦截条件的目标对象;
解析单元602,用于对所述目标对象进行解析,得到所述目标对象中的第一目标语句和第二目标语句;
第一判断单元603,用于判断所述第一目标语句中是否存在预设的替换标注,若所述第一目标语句中存在所述预设的替换标注,则获取与所述预设的替换标注对应的第一替换策略;
第一执行单元604,用于将所述第一替换策略中的各个语句与所述第一目标语句中与所述预设的替换标注所对应的内容进行替换,生成新的第一目标语句,并执行所述新的第一目标语句;
第二判断单元605,用于判断所述第二目标语句中是否存在预设的第一替换注解,若所述第二目标语句中存在所述预设的第一替换注解,则获取与所述预设的第一替换注解对应的第二替换策略;
第二执行单元606,用于将所述第二替换策略中的各个语句与所述第二目标语句中与所述预设的第一替换注解所对应的内容进行替换,生成新的第二目标语句,并执行所述新的第二目标语句。
本发明实施例提供的装置中,通过调用预设的拦截接口,依据所述拦截接口中的预设拦截条件,拦截符合所述拦截条件的目标对象;对所述目标对象进行解析,得到所述目标对象中的第一目标语句和第二目标语句;判断所述第一目标语句中是否存在预设的替换标注,若所述第一目标语句中存在所述预设的替换标注,则获取与所述预设的替换标注对应的第一替换策略;将所述第一替换策略中的各个语句与所述第一目标语句中与所述预设的替换标注所对应的内容进行替换,生成新的第一目标语句,并执行所述新的第一目标语句;判断所述第二目标语句中是否存在预设的第一替换注解,若所述第二目标语句中存在所述预设的第一替换注解,则获取与所述预设的第一替换注解对应的第二替换策略;将所述第二替换策略中的各个语句与所述第二目标语句中与所述预设的第一替换注解所对应的内容进行替换,生成新的第二目标语句,并执行所述新的第二目标语句。通过应用本发明实施例提供的方法,可以将目标对象拦截后,对所述目标对象进行解析,得到目标语句后判断是否满足进行语句替换的条件,若满足语句替换的条件,则获取对应的替换策略,并将所述目标语句中进行替换的内容与所述替换策略中的语句进行替换,简化了开发人员编写代码的重复性,以及降低了数据库系统的开发难度。
本发明实施例提供的装置中,基于前述方案,所述解析单元602,包括:
调用子单元,用于调用预设的解析方法对所述目标对象进行解析,得到对所述目标对象进行解析后的内容;
确定子单元,用于确定所述第一目标语句的第一语句属性,和所述第二目标语句的第二语句属性;
第一获取子单元,用于依据所述第一语句属性,得到对所述目标语句解析得到的内容中与所述第一语句属性相对应的第一目标语句;
第二获取子单元,用于依据所述第二语句属性,得到对所述目标语句解析得到的内容中与所述第二语句属性相对应的第二目标语句。
本发明实施例提供的装置中,基于前述方案,还包括:
获取单元,用于若所述第二目标语句中不存在预设的第一替换注解,则获取与所述第二目标语句对应的映射语句;
第三判断单元,用于判断所述映射语句中是否存在预设的第二替换注解,若所述映射语句中存在所述预设的第二替换注解,则获取与所述预设的第二替换注解对应的第三替换策略;
第三执行单元,用于将所述第三替换策略中的各个语句与所述预设映射语句中与所述第二替换注解所对应的内容进行替换,生成新的映射语句,并执行所述新的映射语句。
本发明实施例提供的装置中,基于前述方案,所述第一执行单元604,包括:
查找子单元,用于确定所述预设的替换标注中的标注内容,查找所述第一目标语句中与所述标注内容相对应的内容;
覆盖子单元,用于调用预设的转换接口,通过所述转换接口将所述第一替换策略中的各个语句覆盖所述第一目标语句中与所述标注内容相对应的内容。
本发明实施例提供的装置中,基于前述方案,还包括:
修改子单元,用于获取所述第二替换策略中预设的第一策略参数,依据所述第一策略参数修改所述解析方法中预设的解析参数。
本发明实施例提供的装置中,基于前述方案,所述调用单元601,包括:
第一判断子单元,用于判断所述目标对象的执行方法;
第一拦截子单元,用于若所述目标对象的执行方法为第一执行方法,则所述目标对象符合预设拦截条件,对所述目标对象进行拦截;
第二判断子单元,用于若所述目标对象的执行方法为第二执行方法,则判断所述目标对象是否为操作类型对象;
第二拦截子单元,用于若所述目标对象为所述操作类型对象,则对所述目标对象进行封装,生成符合预设拦截条件的目标代理,并对所述目标代理进行拦截。
本发明实施例还提供了一种电子设备,其结构示意图如图5所示,具体包括存储器701,以及一个或者一个以上的程序702,其中一个或者一个以上程序702存储于存储器701中,且经配置以由一个或者一个以上处理器703执行以下所述的语句替换方法:
调用预设的拦截接口,并依据所述拦截接口中的预设拦截条件,拦截符合所述预设拦截条件的目标对象;
对所述目标对象进行解析,得到所述目标对象中的第一目标语句和第二目标语句;
判断所述第一目标语句中是否存在预设的替换标注,若所述第一目标语句中存在所述预设的替换标注,则获取与所述预设的替换标注对应的第一替换策略;
将所述第一替换策略中的各个语句与所述第一目标语句中与所述预设的替换标注所对应的内容进行替换,生成新的第一目标语句,并执行所述新的第一目标语句;
判断所述第二目标语句中是否存在预设的第一替换注解,若所述第二目标语句中存在所述预设的第一替换注解,则获取与所述预设的第一替换注解对应的第二替换策略;
将所述第二替换策略中的各个语句与所述第二目标语句中与所述预设的第一替换注解所对应的内容进行替换,生成新的第二目标语句,并执行所述新的第二目标语句。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统或系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的系统及系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (8)
1.一种语句替换方法,其特征在于,包括:
调用预设的拦截接口,并依据所述拦截接口中的预设拦截条件,拦截符合所述预设拦截条件的目标对象;
对所述目标对象进行解析,得到所述目标对象中的第一目标语句和第二目标语句,包括:调用预设的解析方法对所述目标对象进行解析,得到对所述目标对象进行解析后的内容;确定所述第一目标语句的第一语句属性,和所述第二目标语句的第二语句属性;依据所述第一语句属性,得到对所述目标语句解析得到的内容中与所述第一语句属性相对应的第一目标语句;依据所述第二语句属性,得到对所述目标语句解析得到的内容中与所述第二语句属性相对应的第二目标语句;
判断所述第一目标语句中是否存在预设的替换标注,若所述第一目标语句中存在所述预设的替换标注,则获取与所述预设的替换标注对应的第一替换策略;
将所述第一替换策略中的各个语句与所述第一目标语句中与所述预设的替换标注所对应的内容进行替换,生成新的第一目标语句,并执行所述新的第一目标语句;
判断所述第二目标语句中是否存在预设的第一替换注解,若所述第二目标语句中存在所述预设的第一替换注解,则获取与所述预设的第一替换注解对应的第二替换策略;
将所述第二替换策略中的各个语句与所述第二目标语句中与所述预设的第一替换注解所对应的内容进行替换,生成新的第二目标语句,并执行所述新的第二目标语句。
2.根据权利要求1所述的方法,其特征在于,还包括:
若所述第二目标语句中不存在预设的第一替换注解,则获取与所述第二目标语句对应的映射语句;
判断所述映射语句中是否存在预设的第二替换注解,若所述映射语句中存在所述预设的第二替换注解,则获取与所述预设的第二替换注解对应的第三替换策略;
将所述第三替换策略中的各个语句与所述预设映射语句中与所述第二替换注解所对应的内容进行替换,生成新的映射语句,并执行所述新的映射语句。
3.根据权利要求1所述的方法,其特征在于,所述将所述第一替换策略中的各个语句与所述第一目标语句中与所述预设的替换标注所对应的内容进行替换,包括:
确定所述预设的替换标注中的标注内容,查找所述第一目标语句中与所述标注内容相对应的内容;
调用预设的转换接口,通过所述转换接口将所述第一替换策略中的各个语句覆盖所述第一目标语句中与所述标注内容相对应的内容。
4.根据权利要求1所述的方法,其特征在于,还包括:
获取所述第一替换策略中预设的第一策略参数,依据所述第一策略参数修改所述解析方法中预设的解析参数。
5.根据权利要求1所述的方法,其特征在于,所述依据所述拦截接口中的预设拦截条件,拦截符合所述预设拦截条件的目标对象,包括:
判断所述目标对象的执行方法;
若所述目标对象的执行方法为第一执行方法,则所述目标对象符合预设拦截条件,对所述目标对象进行拦截;
若所述目标对象的执行方法为第二执行方法,则判断所述目标对象是否为操作类型对象;
若所述目标对象为所述操作类型对象,则对所述目标对象进行封装,生成符合预设拦截条件的目标代理,并对所述目标代理进行拦截。
6.一种语句替换装置,其特征在于,包括:
调用单元,用于调用预设的拦截接口,并依据所述拦截接口中的预设拦截条件,拦截符合所述预设拦截条件的目标对象;
解析单元,用于对所述目标对象进行解析,得到所述目标对象中的第一目标语句和第二目标语句;
所述解析单元,包括:调用子单元、确定子单元、第一获取子单元和第二获取子单元;
所述调用子单元,用于调用预设的解析方法对所述目标对象进行解析,得到对所述目标对象进行解析后的内容;
所述确定子单元,用于确定所述第一目标语句的第一语句属性,和所述第二目标语句的第二语句属性;
所述第一获取子单元,用于依据所述第一语句属性,得到对所述目标语句解析得到的内容中与所述第一语句属性相对应的第一目标语句;
所述第二获取子单元,用于依据所述第二语句属性,得到对所述目标语句解析得到的内容中与所述第二语句属性相对应的第二目标语句;
第一判断单元,用于判断所述第一目标语句中是否存在预设的替换标注,若所述第一目标语句中存在所述预设的替换标注,则获取与所述预设的替换标注对应的第一替换策略;
第一执行单元,用于将所述第一替换策略中的各个语句与所述第一目标语句中与所述预设的替换标注所对应的内容进行替换,生成新的第一目标语句,并执行所述新的第一目标语句;
第二判断单元,用于判断所述第二目标语句中是否存在预设的第一替换注解,若所述第二目标语句中存在所述预设的第一替换注解,则获取与所述预设的第一替换注解对应的第二替换策略;
第二执行单元,用于将所述第二替换策略中的各个语句与所述第二目标语句中与所述预设的第一替换注解所对应的内容进行替换,生成新的第二目标语句,并执行所述新的第二目标语句。
7.根据权利要求6所述的装置,其特征在于,还包括:
获取单元,用于若所述第二目标语句中不存在预设的第一替换注解,则获取与所述第二目标语句对应的映射语句;
第三判断单元,用于判断所述映射语句中是否存在预设的第二替换注解,若所述映射语句中存在所述预设的第二替换注解,则获取与所述预设的第二替换注解对应的第三替换策略;
第三执行单元,用于将所述第三替换策略中的各个语句与所述预设映射语句中与所述第二替换注解所对应的内容进行替换,生成新的映射语句,并执行所述新的映射语句。
8.一种电子设备,其特征在于,包括存储器,以及一个或者一个以上的程序,其中一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器执行如权利要求1~5任意一项所述的语句替换方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910543151.4A CN110262787B (zh) | 2019-06-21 | 2019-06-21 | 语句替换方法、装置和电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910543151.4A CN110262787B (zh) | 2019-06-21 | 2019-06-21 | 语句替换方法、装置和电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110262787A CN110262787A (zh) | 2019-09-20 |
CN110262787B true CN110262787B (zh) | 2022-12-13 |
Family
ID=67920418
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910543151.4A Active CN110262787B (zh) | 2019-06-21 | 2019-06-21 | 语句替换方法、装置和电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110262787B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101610251A (zh) * | 2009-07-21 | 2009-12-23 | 山东竞星信息科技有限公司 | 一种预定义关键字的信息拦截方法和设备 |
CN102254113A (zh) * | 2011-06-27 | 2011-11-23 | 深圳市安之天信息技术有限公司 | 一种检测和拦截移动终端恶意代码的方法及系统 |
CN103019921A (zh) * | 2011-09-20 | 2013-04-03 | 中国人民解放军63928部队 | 一种基于故障注入的操作系统容错性测试系统及其方法 |
CN105843638A (zh) * | 2016-03-18 | 2016-08-10 | 浪潮软件集团有限公司 | 一种Spring旧版本框架的升级改造方法 |
US10146936B1 (en) * | 2015-11-12 | 2018-12-04 | EMC IP Holding Company LLC | Intrusion detection for storage resources provisioned to containers in multi-tenant environments |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100583099C (zh) * | 2008-01-11 | 2010-01-20 | 清华大学 | 文件系统访问记录的动态采集方法 |
CA2907583A1 (en) * | 2013-03-18 | 2014-09-25 | Cloudmask | Systems and methods for intercepting, processing, and protecting user data through web application pattern detection |
CN104009977B (zh) * | 2014-05-09 | 2016-10-05 | 北京奇虎科技有限公司 | 一种信息保护的方法和系统 |
CN105471823B (zh) * | 2014-09-03 | 2018-10-26 | 阿里巴巴集团控股有限公司 | 一种敏感信息处理方法、装置、服务器及安全判定系统 |
CN106407843A (zh) * | 2016-10-17 | 2017-02-15 | 深圳中兴网信科技有限公司 | 数据脱敏方法和数据脱敏装置 |
CN107679412B (zh) * | 2017-09-15 | 2021-05-18 | 福建星瑞格软件有限公司 | 一种拦截数据库访问数据的方法以及装置 |
CN107871086A (zh) * | 2017-10-13 | 2018-04-03 | 平安科技(深圳)有限公司 | 敏感信息屏蔽方法、应用服务器及计算机可读存储介质 |
CN109376166B (zh) * | 2018-08-20 | 2023-07-04 | 中国平安财产保险股份有限公司 | 脚本转换方法、装置、计算机设备及存储介质 |
CN109815284B (zh) * | 2019-01-04 | 2024-08-16 | 平安科技(深圳)有限公司 | 一种数据处理的方法和装置 |
-
2019
- 2019-06-21 CN CN201910543151.4A patent/CN110262787B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101610251A (zh) * | 2009-07-21 | 2009-12-23 | 山东竞星信息科技有限公司 | 一种预定义关键字的信息拦截方法和设备 |
CN102254113A (zh) * | 2011-06-27 | 2011-11-23 | 深圳市安之天信息技术有限公司 | 一种检测和拦截移动终端恶意代码的方法及系统 |
CN103019921A (zh) * | 2011-09-20 | 2013-04-03 | 中国人民解放军63928部队 | 一种基于故障注入的操作系统容错性测试系统及其方法 |
US10146936B1 (en) * | 2015-11-12 | 2018-12-04 | EMC IP Holding Company LLC | Intrusion detection for storage resources provisioned to containers in multi-tenant environments |
CN105843638A (zh) * | 2016-03-18 | 2016-08-10 | 浪潮软件集团有限公司 | 一种Spring旧版本框架的升级改造方法 |
Non-Patent Citations (1)
Title |
---|
SQL注入及SQL_Server的安全性研究;徐寅昊;《中国优秀硕士学位论文全文数据库 信息科技辑》;20091215(第12期);I138-555 * |
Also Published As
Publication number | Publication date |
---|---|
CN110262787A (zh) | 2019-09-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US12032956B2 (en) | Techniques to deploy an application as a cloud computing service | |
US8516443B2 (en) | Context-sensitive analysis framework using value flows | |
US10209968B2 (en) | Application compiling | |
Wittern et al. | Opportunities in software engineering research for web API consumption | |
US10585655B2 (en) | Systems and methods for automated retrofitting of customized code objects | |
US11263186B2 (en) | System and method for customized graphQL data-handling scripts | |
US8612946B2 (en) | Cross-building support using dependency information | |
US11977872B2 (en) | Method and system for code maintenance | |
US20220237057A1 (en) | Code consolidation system | |
US20180025162A1 (en) | Application program analysis apparatus and method | |
WO2014107477A1 (en) | Enhanced string analysis improving static analysis accuracy | |
CN112988298A (zh) | 可视化界面配置方法、装置、计算机设备及存储介质 | |
CN112612502A (zh) | 补丁生成方法、装置、设备及存储介质 | |
CN110333872A (zh) | 一种应用的处理方法、装置、设备和介质 | |
CN113901083A (zh) | 基于多解析器的异构数据源操作资源解析定位方法和设备 | |
US9367307B2 (en) | Staged points-to analysis for large code bases | |
US9244706B2 (en) | Command line shell command generation based on schema | |
US10606569B2 (en) | Declarative configuration elements | |
CN110262787B (zh) | 语句替换方法、装置和电子设备 | |
US12093686B2 (en) | Code maintenance system | |
CN113469740B (zh) | 广告数据获取方法、装置、设备及存储介质 | |
CN113138767A (zh) | 代码语言转换方法、装置、电子设备及存储介质 | |
WO2020139812A1 (en) | Systems and methods for enabling customization via a plug-in | |
US20190196945A1 (en) | Entity performance and usability analysis framework | |
WO2022123763A1 (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 |