修改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);
}
}
新建一个开启与关闭Session与Transaction的Filter
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中就可以不用管我们的Session与Transaction了
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.cfg.xml)、映射文件(.hbm.xml)、Session工厂、Session和Transaction等。 2. **Struts2**:Struts2是一个基于MVC设计模式的Web应用框架,用于构建企业级的Java Web...
在Java Web开发中,整合Struts2和Hibernate可以帮助我们构建高效、可维护的网上购物系统。下面我们将详细探讨这两个框架的整合过程以及相关知识点。 首先,Struts2是Apache软件基金会的一个项目,它是基于MVC设计...
Struts2和Hibernate是Java开发中两个非常重要的框架,它们分别负责表现层和持久层的管理。Struts2是一款基于MVC(Model-View-Controller)设计模式的Web应用框架,而Hibernate则是一个对象关系映射(ORM)工具,用于...
Struts和Hibernate是Java开发中常用的两个开源框架,它们分别用于处理MVC(Model-View-Controller)架构的控制层和持久层。Struts提供了一种组织和管理应用程序业务逻辑的方式,而Hibernate则是一个对象关系映射...
Hibernate_API.chm提供了Hibernate的核心API,包括Session、Transaction、Criteria、HQL(Hibernate Query Language)等关键接口和类的描述。开发者可以学习如何定义实体类、配置数据映射文件(Hibernate.cfg.xml)...
整合Spring和Hibernate的主要目的是利用Spring的管理能力来控制Hibernate的SessionFactory和Session,以及事务管理。下面我们将详细探讨整合的步骤和方法。 1. **配置环境**: - 首先,确保你的项目中包含了Spring...
### Java8 + Tomcat8 + Struts2.5 + Spring4.3 + Hibernate5.2 框架搭建详细过程 #### 一、环境配置与准备 在搭建一个基于Java8 + Tomcat8 + Struts2.5 + Spring4.3 + Hibernate5.2 的项目前,首先需要对开发环境...
### 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整合 在企业级应用开发中,Spring框架与Hibernate框架的结合使用非常常见。这种整合主要是为了利用Spring的轻量级特性来简化Hibernate的配置...
- **Hibernate基本操作**:在Hibernate会话接口中,`delete`方法用于删除实体,`merge`方法用于合并实体,`beginTransaction`方法用于开始事务处理。 - **HQL查询创建**:通过`createQuery`方法创建HQL查询接口,`...
综上所述,Struts2、Spring和Hibernate是Java Web开发中常用的三大框架,它们各自解决了不同层面的问题。Struts2负责处理Web请求,Spring则关注于业务逻辑的组织和管理,而Hibernate专注于对象和数据库之间的映射。...
在整合SSH2时,Hibernate的SessionFactory和Transaction管理通常在Spring的配置文件中定义,这样Action可以直接通过Spring获取Session来执行CRUD操作,降低了代码与数据库的直接交互。 SSH2框架的整合涉及多方面的...
在SSH整合中,Spring作为“胶水”将Struts和Hibernate紧密地结合在一起。它管理Struts的Action实例,通过AOP实现事务控制,同时还可以通过Spring的ApplicationContext加载和管理Hibernate的SessionFactory。 整合...
综上所述,Spring 整合 JDBC、Hibernate 和 Struts 实现了一个完整的后端开发框架,提供了强大的数据访问、对象关系映射以及用户交互功能。通过合理的配置和组件间协同,可以构建出高效、可维护的企业级 Web 应用。
7. **在Spring中管理Hibernate的Session和Transaction**:通过Spring的`HibernateTemplate`或`HibernateDaoSupport`,以及AOP的事务管理,来简化数据库操作。 完成以上步骤后,你就成功地搭建了一个基于Struts2、...
Hibernate支持JPA(Java Persistence API),并提供了自己的API,如Session、Transaction和Query,方便数据操作和事务管理。 在使用这个压缩包时,你需要将jar包添加到项目的类路径中,确保所有的依赖都已包含。...
Java框架SSH(Struts2、Hibernate、Spring)的整合是Java Web开发中常见的技术栈,它结合了MVC模式的Struts2、持久层管理的Hibernate以及依赖注入和AOP的Spring,形成了一个强大的企业级应用开发解决方案。下面将...
Hibernate的会话接口是Session,由SessionFactory创建,而Transaction接口负责事务管理,Criteria接口则用于封装HQL(Hibernate Query Language)查询。 Struts2框架是由Struts 1和WebWork两个框架合并和发展而来的...
【jbpm+ssh整合】是将企业级工作流引擎jbpm与流行的SSH(Struts、Spring、Hibernate)框架集成,实现一个完整的业务流程管理系统。jbpm是一个开源的工作流引擎,可以处理复杂的业务流程自动化,而SSH是Java开发中...
7. **Struts与Hibernate集成**:结合前面章节的内容,学习如何将Struts 1.x与Hibernate整合,实现数据访问层和业务逻辑层的分离。 通过这三章的学习,读者将能够熟练地运用MyEclipse 6进行Java企业级应用的开发,...