大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 Hibernate Filter的介紹

Hibernate Filter的介紹

更新時間:2022-06-20 09:48:24 來源:動力節點 瀏覽1376次

Hibernate過濾器(filter過濾器)是全局有效的、具有名字、可以帶參數的過濾器,對于某個特定的Hibernate session您可以選擇是否啟用(或禁用)某個過濾器。

Hibernate3的過濾器可以進行預定義,并可綁定在類和集合層。那么什么叫預定義過濾器呢?就是可以定義象"where"子句的限制性子句,但這些 子句是相對類和不同集合的元素的。除了這些過濾器條件可以被參數化外。系統還能決定在運行是指定的過濾器是否應該被打開以及什么值被傳入過濾器參數。

過濾器的配置:

為了使用過濾器,它們需要首先被定義,然后和響應的元素綁定。為了定義一個過濾器,我們將使用中的元素來定義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>
  或者是
 <filter name="filtertest" condition="id &lt; :myid"/>  &lt; 是小于

或附著在一個集合上。

<set ...>
 <filter name="myFilter" condition=":myFilterParam = my_filtered_column"/>
    或者是
    <filter name="filtertest" condition="id &lt; :myid"/>  &lt; 是小于
</set>

這里面的配置相當于在HQL語句中寫上where id<:myid

當然,我們也可以兩者皆有。

過濾器的用法:

為 了支持新過濾器,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設計街頭團隊想用一個更有效的特性來處理每一件事,無論它們是國際化的還是本地數據,或是為了安全考慮以及其他的事。現在讓我們看一個例子來解釋這一切。

現在假設有一個實體,這個實體跟著“有效的記錄”數據庫模式。這個實體有多個行,每一行都根據日期不同而不同,也就是說在日期范圍內是有效的。一個 employment記錄將是一個非常好的例子,因為employees可以來或去或再回來。現在我們開發一個帶UI的程序,這個程序需要處理 employment數據的當前記錄。為了使用新的過濾器特性達到這個目的。我們首先需要定義這個過濾器,然后將它附著在Employee類上。

<filter-def name="effectiveDate">
 <filter-param name="asOfDate" type="date"/>
</filter-def>
<class name="Employee" ...>
 ...
 <many-to-one name="department" column="dept_id" class="Department"/>
 <property name="effectiveStartDate" type="date" column="eff_start_dt"/>
 <property name="effectiveEndDate" type="date" column="eff_end_dt"/>
 ...
 <filter name="effectiveDate" condition=":asOfDate BETWEEN eff_start_dt and eff_end_dt"/>
</class>
<class name="Department" ...>
 ...
 <set name="employees" lazy="true">
  <key column="dept_id"/>
  <one-to-many class="Employee"/>
  <filter name="effectiveDate" condition=":asOfDate BETWEEN eff_start_dt and eff_end_dt"/>
 </set>
</class>

然后,為了保證總是加在到當前的有效記錄。只要簡單地將過濾器打開即可,代碼如下:

Session session = ...;
session.enabledFilter("effectiveDate").setParameter("asOfDate", new Date());
List results = session.createQuery("from Employee as e where e.salary > :targetSalary")
.setLong("targetSalary", new Long(1000000))
.list();

在上面的HQL中,即使我們只給出一個salary約束條件,由于我們已經打開發過濾器,也只會得到當前活動的比一百萬多的雇員。

通過上述介紹,相信大家對Hibernate Filter已經有所了解,大家如果對此比較感興趣,想了解更多相關知識,可以關注一下動力節點的Hibernate入門視頻,里面的課程內容由淺到深,通俗易懂,適合小白學習,希望對大家能夠有所幫助哦。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 亚洲女bbwxxxx另类 | 久久香蕉国产线看观看亚洲卡 | 日韩欧美黄色片 | 国产在线观看美女福利精 | 精品一区二区三区三区 | 亚洲日本一区二区三区高清在线 | 992人人草| 欧美成人免费在线 | 在线观看免费情网站大全 | 欧美成人区 | 特黄级| 国产精品麻豆a啊在线观看 国产精品麻豆高清在线观看 | jizz人妖 | 亚洲女人国产香蕉久久精品 | 久久久久久国产精品免费 | 五月色婷婷亚洲精品 | 中文字幕天天躁夜夜狠狠综合 | 久久精品99视频 | 国产午夜亚洲精品国产 | 久久久国产乱子伦精品 | 欧美80岁老妇一级毛片 | 久久这里只有 | 亚洲另在线日韩综合色 | 波多野结衣在线观看3人 | 四虎影视免费永久在线观看 | 精品欧美一区二区三区在线 | 国产swag在线 | xxx中国www免费| 欧美天天在线 | 日韩视频不卡 | 久久综合狠狠综合久久 | 日日插日日操 | 97精品国产高清在线看入口 | 高清视频在线播放 | 国内精品综合九九久久精品 | 日本aaaa级 | 青青成人在线 | 国内特级毛片 | 欧美综合视频在线观看 | 不卡网站 | 91视频观看 |