`
guochongcan
  • 浏览: 326838 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Struts与Hibernate整合将Session和Transaction放在Filter中

    博客分类:
  • SSH
阅读更多

修改HibernateSessionFactory文件(这个文件是由Hibernate帮我们自己动完成的)

加上如下内容:

private static final ThreadLocal trthreadLocal = new ThreadLocal();//事务线程

       /**

     * 打开事务

     */

    public static void OpenTransaction(){

       Transaction tran=(Transaction) trthreadLocal.get();

       if(tran==null){

           tran=getSession().beginTransaction();

           trthreadLocal.set(tran);

       }

    }

    /**

     * 提交事务

     */

    public static void CommitTransaction(){

       Transaction tran=(Transaction) trthreadLocal.get();

       if(tran!=null && !tran.wasCommitted() && !tran.wasRolledBack()){

           tran.commit();

           trthreadLocal.set(null);

       }

    }

    /**

     * 回滚事务

     */

    public static void RollbackTransaction(){

       Transaction tran=(Transaction) trthreadLocal.get();

       if(tran!=null && !tran.wasCommitted() && !tran.wasRolledBack()){

           tran.rollback();

           trthreadLocal.set(null);

       }

    }

新建一个开启与关闭SessionTransactionFilter

public class SessionTransactionFilter extends HttpServlet implements Filter {

   

    public void init(FilterConfig arg0) throws ServletException {

      

    }

   

    public void doFilter(ServletRequest arg0, ServletResponse arg1,

           FilterChain arg2) throws IOException, ServletException {

       try {

           HibernateSessionFactory.getSession();//打开session

           HibernateSessionFactory.OpenTransaction();//打开事务

           arg2.doFilter(arg0, arg1);

           HibernateSessionFactory.CommitTransaction();//事务提交

       } catch (Exception e) {

           HibernateSessionFactory.RollbackTransaction();//回滚事务

           e.printStackTrace();

       }finally{

           HibernateSessionFactory.closeSession();//关闭session

       }

    }

}

 

在我们的DAO中就可以不用管我们的SessionTransaction

1,  共公接口

public interface CommonDAO {

    public void save(Object obj);

    public void delete(Object obj);

    public void update(Object obj);

}

2,  共公方法

public class CommonDAOImple implements CommonDAO{

    public Session GetSession(){

       return HibernateSessionFactory.getSession();

    }

    public void delete(Object obj) {

       this.GetSession().delete(obj);

    }

    public void save(Object obj) {

       this.GetSession().save(obj);      

    }

    public void update(Object obj) {

       this.GetSession().update(obj);    

    }  

}

3,  具体的某一个城对象的interface如下:

public interface FlDAO extends CommonDAO {

    public TFl getone(int id);

    public List getall();

    public void delete(int id);

}

4,  具体的某一个城对象的DAO如下:

public class FlDAOImple extends CommonDAOImple implements FlDAO {

    public List getall() {

       Query query=this.GetSession().createQuery("from TFl");

       return query.list();

    }

    public TFl getone(int id) {

       return (TFl) this.GetSession().get(TFl.class, new Integer(id));

    }

    public void delete(int id) {

       Query query=this.GetSession().createQuery("delete TFl where FId=:id");

       query.setInteger("id", id);

       query.executeUpdate();

    }

}

 

5,  个人说明:

这样的做法可以解决Hibernate中的懒加载问题和每个方法中的Session开启与关闭,Transaction的开启与关闭。但是它带来的问题也是很大的

1,  Session的开启在客户端请求时打开,请求完全结束时关闭,这样Session的开启时间太长,而Session中是非线程安全的。并且一个Session保持与数据库一个连接,长时间的占用了数据库的资源。

2,  Transaction的开启时间在Session之后一点,关闭时间在Session之前一点,同样也开了很长的时间,这段时间内可能导致数据库里的数据库产生锁,别的线程没法操作数据。

分享到:
评论

相关推荐

    hibernate struts2 和spring的整合项目

    主要涉及的概念有实体类、配置文件(hibernate.cfg.xml)、映射文件(.hbm.xml)、Session工厂、Session和Transaction等。 2. **Struts2**:Struts2是一个基于MVC设计模式的Web应用框架,用于构建企业级的Java Web...

    整合struts2和hibernate框架的网上购物

    在Java Web开发中,整合Struts2和Hibernate可以帮助我们构建高效、可维护的网上购物系统。下面我们将详细探讨这两个框架的整合过程以及相关知识点。 首先,Struts2是Apache软件基金会的一个项目,它是基于MVC设计...

    java程序struts2+hibernate

    Struts2和Hibernate是Java开发中两个非常重要的框架,它们分别负责表现层和持久层的管理。Struts2是一款基于MVC(Model-View-Controller)设计模式的Web应用框架,而Hibernate则是一个对象关系映射(ORM)工具,用于...

    struts+hibernate配置.doc

    Struts和Hibernate是Java开发中常用的两个开源框架,它们分别用于处理MVC(Model-View-Controller)架构的控制层和持久层。Struts提供了一种组织和管理应用程序业务逻辑的方式,而Hibernate则是一个对象关系映射...

    API集合(包含struts hibernate spring)

    Hibernate_API.chm提供了Hibernate的核心API,包括Session、Transaction、Criteria、HQL(Hibernate Query Language)等关键接口和类的描述。开发者可以学习如何定义实体类、配置数据映射文件(Hibernate.cfg.xml)...

    Spring和Hibernate的整合操作示例

    整合Spring和Hibernate的主要目的是利用Spring的管理能力来控制Hibernate的SessionFactory和Session,以及事务管理。下面我们将详细探讨整合的步骤和方法。 1. **配置环境**: - 首先,确保你的项目中包含了Spring...

    java8+tomcat8+struts2.5+spring4.3+hibernate5.2框架搭建详细过程

    ### Java8 + Tomcat8 + Struts2.5 + Spring4.3 + Hibernate5.2 框架搭建详细过程 #### 一、环境配置与准备 在搭建一个基于Java8 + Tomcat8 + Struts2.5 + Spring4.3 + Hibernate5.2 的项目前,首先需要对开发环境...

    Struts1.x Spring2.x Hibernate3.x DWR2.x整合工具文档v1.00

    ### Struts1.x、Spring2.x、Hibernate3.x 和 DWR2.x 整合知识点解析 #### 一、Struts1.x与Spring2.x的整合 **1.1 在web.xml中进行Struts和Spring的配置** 为了实现Struts1.x与Spring2.x的无缝集成,首先需要在...

    Spring+Hibernate+Struts2

    ### Spring+Hibernate+Struts2 整合开发详解 #### 一、Spring+Hibernate整合 在企业级应用开发中,Spring框架与Hibernate框架的结合使用非常常见。这种整合主要是为了利用Spring的轻量级特性来简化Hibernate的配置...

    J2EE考试复习试题_struts2_spring_hibernate.doc

    - **Hibernate基本操作**:在Hibernate会话接口中,`delete`方法用于删除实体,`merge`方法用于合并实体,`beginTransaction`方法用于开始事务处理。 - **HQL查询创建**:通过`createQuery`方法创建HQL查询接口,`...

    Struts2+Spring+Hibernate知识点总结

    综上所述,Struts2、Spring和Hibernate是Java Web开发中常用的三大框架,它们各自解决了不同层面的问题。Struts2负责处理Web请求,Spring则关注于业务逻辑的组织和管理,而Hibernate专注于对象和数据库之间的映射。...

    SSH2框架整合搭建实例

    在整合SSH2时,Hibernate的SessionFactory和Transaction管理通常在Spring的配置文件中定义,这样Action可以直接通过Spring获取Session来执行CRUD操作,降低了代码与数据库的直接交互。 SSH2框架的整合涉及多方面的...

    SSH项目整合示例【OpenSessionInView】所用到的jar包

    在SSH整合中,Spring作为“胶水”将Struts和Hibernate紧密地结合在一起。它管理Struts的Action实例,通过AOP实现事务控制,同时还可以通过Spring的ApplicationContext加载和管理Hibernate的SessionFactory。 整合...

    spring整合jdbc hbm struts 的各种配置

    综上所述,Spring 整合 JDBC、Hibernate 和 Struts 实现了一个完整的后端开发框架,提供了强大的数据访问、对象关系映射以及用户交互功能。通过合理的配置和组件间协同,可以构建出高效、可维护的企业级 Web 应用。

    struts2springhibernate环境搭建教程

    7. **在Spring中管理Hibernate的Session和Transaction**:通过Spring的`HibernateTemplate`或`HibernateDaoSupport`,以及AOP的事务管理,来简化数据库操作。 完成以上步骤后,你就成功地搭建了一个基于Struts2、...

    Strus2+Spring 4 +Hibernate 所需全部jar包

    Hibernate支持JPA(Java Persistence API),并提供了自己的API,如Session、Transaction和Query,方便数据操作和事务管理。 在使用这个压缩包时,你需要将jar包添加到项目的类路径中,确保所有的依赖都已包含。...

    java框架SSH整合jar包

    Java框架SSH(Struts2、Hibernate、Spring)的整合是Java Web开发中常见的技术栈,它结合了MVC模式的Struts2、持久层管理的Hibernate以及依赖注入和AOP的Spring,形成了一个强大的企业级应用开发解决方案。下面将...

    struts复习模拟题.pdf

    Hibernate的会话接口是Session,由SessionFactory创建,而Transaction接口负责事务管理,Criteria接口则用于封装HQL(Hibernate Query Language)查询。 Struts2框架是由Struts 1和WebWork两个框架合并和发展而来的...

    jbpm+ssh整合

    【jbpm+ssh整合】是将企业级工作流引擎jbpm与流行的SSH(Struts、Spring、Hibernate)框架集成,实现一个完整的业务流程管理系统。jbpm是一个开源的工作流引擎,可以处理复杂的业务流程自动化,而SSH是Java开发中...

    MyEclipse 6 Java开发教程7-9章

    7. **Struts与Hibernate集成**:结合前面章节的内容,学习如何将Struts 1.x与Hibernate整合,实现数据访问层和业务逻辑层的分离。 通过这三章的学习,读者将能够熟练地运用MyEclipse 6进行Java企业级应用的开发,...

Global site tag (gtag.js) - Google Analytics