org.springframework.orm.hibernate3.support.OpenSessionInViewFilter

Spring 爲我們提供了一個叫做 OpenSessionInViewFilter 的過濾器,他是標準的 Servlet Filter 所以我們把它按照規範配置到 web.xml 中方可使用。使用中我們必須配合使用 Spring 的 HibernateDaoSupport 來進行開發,也就是說,我們的dao層的類都要繼承於 HibernateDaoSupport,從中由 Spring 來控制 Hibernate 的 Session 在請求來的時候開啓,走的時候關閉,保證了我們訪問數據對象時的穩定性。

  1. 在 web.xml 中加入對應過濾器配置文件

 

Java代碼  收藏代碼
  1. <!-- Spring的OpenSessionInView實現 -->  
  2. <filter>  
  3.     <filter-name>openSessionInViewFilter</filter-name>  
  4.     <filter-class>        org.springframework.orm.hibernate3.support.OpenSessionInViewFilter  
  5.     </filter-class>  
  6. <!-- singleSession默認爲true,若設爲false則等於沒用OpenSessionInView 。所以默認可以不寫-->  
  7.      <init-param>  
  8.        <param-name>singleSession</param-name>  
  9.        <param-value>true</param-value>   
  10.      </init-param>   
  11. <!--   
  12. 指定org.springframework.orm.hibernate3.LocalSessionFactoryBean在spring配置文件中的名稱,默認值爲sessionFactory。 如果LocalSessionFactoryBean在spring中的名稱不是sessionFactory,該參數一定要指定,否則會出現找不到sessionFactory的例外。所以默認可以不寫  
  13. -->  
  14.  <init-param>  
  15.      <param-name>sessionFactoryBean</param-name>  
  16.    <param-value>sessionFactory</param-value>  
  17.   </init-param>   
  18. </filter>  
  19. <filter-mapping>  
  20.     <filter-name>openSessionInViewFilter</filter-name>  
  21.     <url-pattern>/*</url-pattern>  
  22. </filter-mapping>  
 

 2. 在我們訪問持久層數據是使用 Spring 爲我們的 HibernateDaoSupport 的支持,並使用其中的對應方法操作我們的持久層數據

 

Java代碼  收藏代碼
  1. import org.springframework.orm.hibernate3.support.HibernateDaoSupport;  
  2.   
  3. public class XxxDAO extends HibernateDaoSupport {  
  4.   
  5.     public void save(Xxx transientInstance) {  
  6.         try {  
  7.             getHibernateTemplate().save(transientInstance);  
  8.         } catch (RuntimeException re) {  
  9.             throw re;  
  10.         }  
  11.     }  
  12. }  
 

 

OpenSessionInViewFilter的主要功能是用來把一個Hibernate Session和一次完整的請求過程對應的線程相綁定。Open Session In View在request把session綁定到當前thread期間一直保持hibernate session在open狀態,使session在request的整個期間都可以使用,如在View層裏PO也可以lazy loading數據,如 ${ company.employees }。當View 層邏輯完成後,纔會通過Filter的doFilter方法或Interceptor的postHandle方法自動關閉session

發佈了3 篇原創文章 · 獲贊 4 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章