天天看點

OpenSessionInView

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

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。

1. 在 web.xml 中加入對應過濾器配置檔案

Java代碼  

OpenSessionInView
  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 的支援,并使用其中的對應方法操作我們的持久層資料

繼續閱讀