J2EE操纵下基于AOP的抓取战略实现[Java编程]
本文“J2EE操纵下基于AOP的抓取战略实现[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
利用了O/R Mapping工具的典型J2EE利用城市面对这样一个问题:若何通过最精简的SQL查询获得所需的数据.很多时刻这可不是轻而易举的事情.默许情形下,O/R Mapping工具会按需加载数据,除非你改变了其默许设置.耽误加载行为保证了依靠的数据只有在真正恳求时才会被加载进来,这样便可以避免成立无谓的对象.有时我们的业务并不会利用到依靠的那些组件,这时耽误加载就派上用场了,同时也无需加载那些用不上的组件了.
典型情形下,我们的业务很清楚需求哪些数据.但由于利用了耽误加载,在履行大量Select查询时数据库的性能会降低,因为业务所需的数据并非一下子得到的.这样,关于那些需求支持大量恳求的利用来说大概会产生瓶颈(可伸缩性问题).
来看个例子吧,假定某个业务流程想要得到一个Person及其Address信息.我们将Address组件配置成耽误加载,这样要想得到所需的数据就需求更多的SQL查询,也就是说首先查询Person,然后再查询Address.这增添了数据库与利用之间的通信本钱.办理办法就是在一个单独的查询中将 Person和Address都得到,因为我们知道这两个组件都是业务流程所需的.
假如在DAO/Repository及底层Service开辟特定于业务的Fetching-API,关于那些拥有差别数据集的相同范畴对象来说,我们就得编写差别的API举行抓取并组装了.这么做会使Repository及底层Service过于膨胀,终究变成保护的梦魇.
耽误抓取的另一个问题就是在获得到恳求的数据前要一向翻开数据库衔接,不然利用就会抛出一个耽误加载非常.
阐明:假如在查询中利用预先抓取来获得二级缓存中的数据时,我们将无法办理上面提出的问题.关于Hibernate来说,假如我们利用预先抓取来获得二级缓存中的数据,那么它将从数据库而不是缓存中去获得数据,哪怕是二级缓存中已经存在该数据.这就阐明Hibernate也没有办理这个问题,从而表明我们不该该在查询中通过预先抓取来得到二级缓存中的对象.
关于那些可以让我们疗养查询以获得缓存对象的O/R Mapping工具来说,假如缓存中有对象就会从缓存中获得,不然采纳预先抓取的方法.这就办理了上面提到的事件/DB衔接问题,因为在查询的履行历程中会同时获得缓存中的数据而不是按需读取(也就是耽误加载).
通过下面的示例代码来理解一下耽误加载所面对的问题及办理办法.考虑以下场景:某范畴中有3个实体,辨别是Employee、Department及Dependent.
这三个实体之间的关系以下:
Employee有0或多个dependents.
Department有0或多个employees.
Employee属于0或1个department.
我们要履行三个操作:
获得employee的具体信息.
获得employee及其dependent的具体信息.
获得employee及其department的具体信息.
以上是“J2EE操纵下基于AOP的抓取战略实现[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |