一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种自定义元数据与持久化实例映射方法与流程

2021-12-01 01:20:00 来源:中国专利 TAG:
1.本专利申请属于数据查询
技术领域
:,更具体地说,是涉及一种自定义元数据与持久化实例映射方法。
背景技术
::2.当前系统对用户可见的信息都是后端根据表结构存储的内容处理后给前端,前端拿到后显示给用户,后端需要对数据进行处理,处理步骤:3.1.按照er图设计结构,不同的数据存储在不同的表中;4.2.后端按照显示需要通过不同的表进行关联查询获取数据;5.3.显示内容返回给前端。6.上述处理步骤面临的技术问题:7.技术问题出现在第二步,关联查询时关联n张表就需要n个leftjoin(左连接)查询,数据库会将连接的n个表进行笛卡尔运算。8.假设n=2,每个表数据有100万条,那么笛卡尔积之后的数据就是100万*100万=1万亿条数据,在此数据集合基础上查询逻辑导致查询效率下降非常明显。当关联的表超过3个以上且表中数据量过大时,系统响应速度变慢,效率随着数据积累后性能下降明显,查询范围不可控,用户等待显示数据的时间过长或连接超时,这是不可忍受的问题。技术实现要素:9.本发明需要解决的技术问题是提供一种自定义元数据与持久化实例映射方法,以消除leftjoin关键字查询,提高查询速度。10.为了解决上述问题,本发明所采用的技术方案是:11.一种自定义元数据与持久化实例映射方法,该方法应用于前后端分离并集成spring框架的web项目,思路是:利用spring框架的aop机制(面向切面编程),自定义切面和切入点,在响应数据给用户之前,通过使用元数据的自定义注解,对数据进行二次处理,以减少使用leftjoin(左连接)查询次数,提高数据查询和处理速度。12.本发明技术方案的进一步改进在于:二次处理是指使用环绕增强,在增强方法中通过java反射机制获取元数据注解的属性。13.本发明技术方案的进一步改进在于:具体包括如下步骤:14.s1、在web项目所在的路径下创建元数据的自定义注解@metadata,并设置该自定义注解的作用范围和生存周期,从而添加相关的属性;15.s2、接着在web项目所在的路径下创建切面类,在此切面类添加一个可以被spring框架实例化成bean对象的注解,该注解命名为@component;16.s3、在步骤s2中的切面类中定义一个切入点方法,设置好标记位,并使用切入点表达式来规定启用增强方法的时机;17.s4、在步骤s3中的切入点方法上方,添加切入点注解;18.s5、在步骤s2中的切面类中定义增强方法,对响应给前端请求的数据进行二次处理;19.s6、在步骤s5中定义的增强方法上添加环绕增强注解;20.s7、利用java反射机制,在步骤s6中的增强方法中获取到使用自定义注解@metadata的对象,并根据使用自定义注解@metadata设置添加的字段名和表名,进行数据的查询和补充,以达到leftjoin效果。21.本发明技术方案的进一步改进在于:步骤s1中,分别通过@target、22.@retention设置自定义注解@metadata的作用范围和生存周期。23.本发明技术方案的进一步改进在于:步骤s3中的设置好标记位是指,设置切入点方法的参数返回值均为空,从而起到标记作用。24.本发明技术方案的进一步改进在于:查询时间控制在500ms以内。25.由于采用了上述技术方案,本发明取得的有益效果是:26.实体类中加一个@metadata就会消除一个leftjoin(左联合)查询,通过元数据的自定义注解映射关联字段,实现单表、单行的单个字段查询,所有数据库脚本上均消除了leftjoin关键字查询;查询范围可控,查询效率稳定,查询速度快,所有业务数据查询时间均可以控制在500ms以内,满足大数据量用户的需求。附图说明27.图1为本发明的工作流程示意图;28.图2为未使用本发明的查询结果图;29.图3为使用本发明的查询结果图。具体实施方式30.下面结合实施例对本发明做进一步详细说明。31.本发明公开了一种自定义元数据与持久化实例映射方法,首先介绍一下aop机制。32.aop机制是面向切面的编程,其编程思想是把散布于不同业务但功能相同的代码从业务逻辑中抽取出来,封装成独立的模块,这些独立的模块被称为切面,切面的具体功能方法被称为关注点。在业务逻辑执行过程中,aop会把分离出来的切面和关注点动态切入到业务流程中,这样做的好处是提高了功能代码的重用性和可维护性。33.aop的相关术语介绍如下:34.1.aspect35.表示切面。切入业务流程的一个独立模块。例如,前面案例的verifyuser类,一个应用程序可以拥有任意数量的切面。36.2.joinpoint37.表示连接点。也就是业务流程在运行过程中需要插入切面的具体位置。例如,前面案例的aopemailnotice类的setteacher方法就是一个连接点。38.3.advice39.表示通知。是切面的具体实现方法。可分为前置通知(@before)、后置通知(@afterreturning)、异常通知(@afterthrowing)、最终通知(@after)和环绕通知(@around)五种。实现方法具体属于哪类通知,是在配置文件和注解中指定的。例如,verifyuser类的beforeadvice方法就是前置通知。40.4.pointcut41.表示切入点。用于定义通知应该切入到哪些连接点上,不同的通知通常需要切入到不同的连接点上。例如,前面案例配置文件的<aop:pointcut>标签。42.5.target43.表示目标对象。被一个或者多个切面所通知的对象。44.上述术语用于代码编程,属于本领域技术人员普遍知晓的技术内容。45.介绍完术语后,为了在实现的功能代码上不使用关键字leftjoin(左联合),本发明的总体处理思路参见图1,研发的技术方案是:利用spring框架的aop机制(面向切面编程),自定义切面和切入点。在响应数据给用户之前,通过使用自主研发的@metadata(元数据)注解,对数据进行二次处理,以达到减少使用leftjoin(左连接)查询次数,提高数据查询和处理速度。46.通俗的讲就是,研发人员创建了一个拦截器,在响应给前端数据之前进行拦截,并对数据进行了二次处理。下面实现步骤中定义的切面类就是拦截器,增强方法就是拦截器实现的功能。47.实现步骤:48.前提:根据该发明使用的应用场景,该发明一定是应用到前后端分离的web项目中。假设我们已经存在一个web项目,下面的实现步骤都是基于该web项目中进行的。且该web项目一定需要集成spring框架。49.1、在项目中的com.j2ee.w3.common.aspect.annotation这个包(可以理解为文件所在的路径)下创建自定义注解@metadata,并分别通过@target和@retention设置该注解的作用范围和生存周期。添加相关的属性:leftfield:左表连接条件字段;rightfield:右表连接条件字段;queryfield:查询字段;jointable:连接表名称。50.部分代码为:51.@metadata(leftfield="company_id",rightfield="id",queryfield="name",jointable="sys_office")52.privatestringcompanyname;53.其中:54.@metadata自定义注解,含义元数据。55.leftfield拦截器左表连接条件字段。56.rightfield拦截器右表连接条件字段。57.queryfield拦截器去查询的字段。58.jointable拦截器去查询时关联的表。59.privatestringcompanyname;代表被@metadata自定义注解标记的属性。60.应用效果:实体类的属性中加一个@metadata就会消除一个leftjoin(左联合)查询。61.2、在项目中的com.j2ee.w3.common.aspect这个包(可以理解为文件所在的路径)下创建切面类metadataaspect,在此切面类添加一个可以被spring框架实例化成bean对象的注解,该注解为@component,起到拦截器的作用。spring框架在项目启动时,会进行bean对象扫描,当发现类上有@component注解时,则会实例化该类,使其成为一个bean对象,并放入spring的ioc容器中,以供后续使用。62.部分代码为:[0063][0064][0065]在上述代码中:[0066]metadataaspect系统可以运行的自定义拦截器名称。[0067]@pointcut需要拦截的文件所在位置。[0068]@around需要拦截的具体方法。[0069]publicobjectdoaround()实现关联字段product_key转换成可以直接显示的product_name。[0070]3、在步骤2的切面类中定义一个切入点方法excudeservice(),该方法的参数返回值均为空,起到标记作用,并使用切入点表达式来规定启用环绕增强方法的时机。[0071]4、在步骤3中的切入点方法上方,添加@pointcut("execution(*com.j2ee.w3.modules.sys.web.vue.uservuecontroller.*(..))")注解,其中括号内是切入点表达式,在符合所配置的表达式的方法中加入增强的方法内容。@pointcut该注解是切入点,可以理解为拦截器要拦截的地方。execution是切入点表达式的关键字。[0072]com.j2ee.w3.modules.sys.web.vue.uservuecontroller.*(..))是切入点表达式的具体内容。表示的意思为:[0073]com.j2ee.w3.modules.sys.web.vue.uservuecontroller该类中的所有方法都将会被拦截器拦截,并通过增强方法对数据进行二次处理。[0074]5、在步骤2的切面类中定义增强方法doaround()。该方法内部就是对响应给前端请求的数据进行二次处理。[0075]6、在步骤5中定义的增强方法上添加@around("excudeservice()")注解,括号内是步骤3中定义的切入点方法名。@around注解的意思是环绕增强,该注解就是告知拦截方法,在切入点包含的方法执行前后都执行该增强方法。[0076]7、利用java反射机制,在步骤6中的增强方法中获取到使用@metadata注解的对象,并根据使用自定义注解@metadata而设置添加的字段名和表名,进行数据的查询和补充,以达到leftjoin效果。[0077]图2和图3均为使用同一组数据进行查询的不同操作界面的界面图,图2为未使用本发明的查询结果,从中可看出响应时间为09:50:01,查询时间为3887毫秒;图3为使用本发明方法的查询结果,从图3可看出响应时间为09:48:01,查询时间为227毫秒,查询时间控制在了500毫秒以内。从图2和图3中右上方的查询时间可以看出,图3相较图2在查询时间上减少了94.2%,降幅十分显著,因此可以力证本发明有效的提高了查询效率。[0078]除此之外,利用其它数据进行查询验证,也可以获得极少的查询时间,在此不再附上界面截图。总体而言,利用本发明的方法,查询时间都可控制在500毫秒之内,响应速度是很快的。[0079]所以,本发明利用spring框架的aop机制(面向切面编程),自定义切面和切入点,使用环绕增强,在增强方法中通过java反射机制获取@metadata(元数据,即定义数据的数据)注解的属性,对数据进行二次处理,以达到减少使用leftjoin(左连接)查询次数,提高了数据查询和处理速度。当前第1页12当前第1页12
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献