您的位置:首页 > 运维架构

OpenSessionInView

2015-08-16 17:32 507 查看
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代码  


<!-- Spring的OpenSessionInView实现 -->  
<filter>  
    <filter-name>openSessionInViewFilter</filter-name>  
    <filter-class>        org.springframework.orm.hibernate3.support.OpenSessionInViewFilter  
    </filter-class>  
<!-- singleSession默认为true,若设为false则等于没用OpenSessionInView 。所以默认可以不写-->  
     <init-param>  
       <param-name>singleSession</param-name>  
       <param-value>true</param-value>   
     </init-param>   
<!--   
指定org.springframework.orm.hibernate3.LocalSessionFactoryBean在spring配置文件中的名称,默认值为sessionFactory。 如果LocalSessionFactoryBean在spring中的名称不是sessionFactory,该参数一定要指定,否则会出现找不到sessionFactory的例外。所以默认可以不写  
-->  
 <init-param>  
     <param-name>sessionFactoryBean</param-name>  
   <param-value>sessionFactory</param-value>  
  </init-param>   
</filter>  
<filter-mapping>  
    <filter-name>openSessionInViewFilter</filter-name>  
    <url-pattern>/*</url-pattern>  
</filter-mapping> 

2. 在我们访问持久层数据是使用 Spring 为我们的 HibernateDaoSupport 的支持,并使用其中的对应方法操作我们的持久层数据
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息