当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:12:00  来源:本站整理

Hibernate3.x过滤器的高级操纵[Java编程]

赞助商链接



  本文“Hibernate3.x过滤器的高级操纵[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

在很多利用程序中不需求一次利用数据表中的全部的数据.在这种情形下,我们就需求利用Hibernate的过滤器(Filter)来得到一个数据字集.过滤器的主要作用是限制我们的利用程序的查询数据.这个过滤器的概念并非什么新概念,如数据库的视图也属于过滤器范围.而Hibernate为我们供应的过滤器是在一个抽象的层次,它可以做到和不依靠于数据库的范例,使数据拜候层只面对一个办理筹划,那就是Hibernate Filter.当然,直接在数据库中成立视图也算一种办理筹划,但这样做太不机动.而Hibernate过滤器却可以在Hibernate会话的历程中翻开或关闭.别的,别的,Hibernate过滤器可以传送参数,这样将大大增添Hibernate的机动性.固然Hibernate2也供应了过滤器,但Hibernate3.x供应了一种全新的过滤器.

Hibernate3的过滤器可以举行预定义,并可绑定在类和调集层.那么什么叫预定义过滤器呢?就是可以定义象"where"子句的限制性子句,但这些子句是相对类和差别调集的元素的.除了这些过滤器条件可以被参数化外.系统还能决意在运行是指定的过滤器能否应当被翻开以及什么值被传入过滤器参数.

1、什么时刻利用过滤器

为了注释为什么利用过滤器,下面让我们先来看一个例子.假定有一个管理用户信息的Web利用程序.在当前状况,我们的利用程序利用同一个利用接口来处理全部的用户信息.但假如终究用户要求将活动用户和过期用户脱离管理.这些状况信息被保存在用户表的某一列中.关于这种需求,我们最简单想到的一个办理筹划是重新写每一个SELECT HQL查询语句,也就是在每一个HQL后加一个WHERE条件来过滤这些数据.当然,这种办法的复杂程序取决于你的Web程序是若何成立的,可以很简单,也可以很复杂.但不管是简单还是复杂,都必须得改正我们曾经测试过的代码,这将给我们的程序带来非常大的隐患.而利用Hibernate3.x,将会给我们带来别的一个办理筹划.我们将会为利用程序的用户状况成立一个过滤器.当用户挑选用户的状况时(活动或过期),利用程序将激活当前Hibernate会话的用户状况过滤器.这样以来,全部的SELECT HQL查询将返回查询后果的子集,而我们只需求在Hibernate会话状况和用户状况过滤器两个地方增添代码,并不需求改正原先的代码.

从概念上讲,你可以利用WHERE子句在利用程序中完成和Hibernate过滤器一样的工作.当然,我们还可以在数据库中成立视图来完成一样的工作(但所利用的数据库必须支持视图功效).这三种办理筹划都可以通过一个或多个查询条件来限制终究后果.而Hibernate过滤器的上风就在于可以随时在程序中关闭或翻开,也就是说过滤器是可编程的,并且过滤器被定义在Hibernate的映射文件中,这样将非常简单保护.当然,过滤器也有不足的地方,主要的不足就是在运行时无法成立新的过滤器.而程序在运行时,全部的过滤器必必要在映射文件中被指定.固然这将大大限制过滤器的机动性,但过滤器支持参数化.关于本文的例子,我们可以在映射文件中指定保存用户状况信息的列.我们不需求在映射文件中指定大概的状况值,这些在程序运行时都可以指定.接下来我们就来看看若何利用Hibernate3.x中的过滤器来写程序.

2、过滤器的配置

为了利用过滤器,它们需求首先被定义,然后和呼应的元素绑定.为了定义一个过滤器,我们将利用<hibernate-mapping/>中的<filter-def/>元从来定义Hibernate过滤器.以下所示:

<filter-def name="myFilter">
  <filter-param name="myFilterParam" type="string"/>
</filter-def>

然后我们将这个过滤器附着在一个类上,以下所示:

<class name="myClass" ...>
  ...
  <filter name="myFilter" condition=":myFilterParam = my_filtered_column"/>
</class>

或附着在一个调集上.

<set ...>
  <filter name="myFilter" condition=":myFilterParam = my_filtered_column"/>
</set>

当然,我们也可以二者皆有.

3、过滤器的用法

为了支持新过滤器,Hibernate3.x中新增添了一个接口:org.hibernate.Filter,以及在org.hibernate.Session中加入了一些新办法.在Session中的新办法有:enableFilter(String filterName), getEnabledFilter(String filterName),以及disableFilter(String filterName).在默许性况下,关于当前的会话,过滤器是关闭的.它们必须利用Session的enableFilter()办法来显式地翻开过滤器.这个办法返回一个新过滤器的实例.按着上述的做法,我们可以用以下的代码翻开过滤器:

session.enableFilter("myFilter").setParameter("myFilterParam", "some-value");

过滤大数据集

关于Hibernate3.x从前的版本,处理大数据集必必要利用大量的代码.为了到达目的,必须先将整个数据集装到内存中,然后对这个数据集利用Session的filter()办法来过滤.并且当过滤实体时,我们必须手工写全部的HQL或一个定制的拦阻器.

而在Hibernate3.x中供应了一种更简便,更一致的办法来过滤数据.Hibernate计划街头团队想用一个更有效的特点来处理每一件事,无论它们是国际化的还是本地数据,或是为了安全考虑以及其他的事.目前让我们看一个例子来注释这一切.


  以上是“Hibernate3.x过滤器的高级操纵[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • 在Hibernate里面动态切换SChema实现访谒差别的数据库的几种办法
  • Hibernate 3新增XML关系长期性介绍
  • Hibernate配置文件在单元测试中的操纵
  • 在Hibernate中动态切换Schema
  • hibernate annoation (八 关联映射)
  • hibernate annoation (九 cascading)
  • <b>hibernate annoation (十 映射查询)</b>
  • hibernate annoation(十一 缓存Ehcache 采纳annoation)
  • Hibernate:操作配置文件生成数据库
  • hibernate annoation (一 加载)
  • hibernate annoation (二 成立表)
  • <b>hibernate annoation (三 id生成器)</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .