Hibernate与Spring整合后,就可以使用IoC及AOP的功能了,好处不在多言。另外一个好处,就是可以通过使用Spring的HibernateTemplate来简化数据库CRUD代码。然而,正是这个HibernateTemplate,存在着以下的缺点:
1. 功能不全,不如Hibernate的储如createQuery()等方法方便、灵活与强大,使用颇受限制;
2. HibernateTemplate中的SessionFacotry封装得太死,且session常常会自动过早关闭,使用上颇多不便;
3. Spring1.2.7实际上只支持Hibernate3.0.5,HibernateTemplate无法使用Hibernate3.1以后新加的功能。
正是由于这三点,使我抵制住了使用HibernateTemplate的诱惑,在将Spring与Hibernate整合后,通过简单的配置,在Spring程序中自由地使用Hibernate3.1.2的功能。这样既可以实现强强联手,又可以在Hibernate新版本出来后,马上进行重新整合,无需等着新版的Spring出来。
在实现上,主要有三点:
1. 在Spring的配置文件中,无需定义长长的hibernateTemplate,只需定义sessionFacotry就行了。
例如,设有一"组织DaoImpl",实现了"组织Dao"及"HibernateDao"两个接口。而"组织Service"通过将"组织DaoImpl"封装起来,对外提供相应的数据库功能服务。
public interface HibernateDao {
public void setSessionFactory(SessionFactory sessionFactory);
}
public interface 组织Dao {
public void 增加组织(组织 组织);
public void 删除组织(Long 组织编号);
public 组织 get组织By名称(String 组织名称);
......
}
public class 组织DaoImpl implements 组织Dao, HibernateDao {
private SessionFactory sessionFactory;
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
public 组织 get组织By名称(String 组织名称) {
......
}
}
public interface 组织Service {
public 组织 get组织By名称(String 组织名称);
......
}
(实际代码中,组织Service与组织DaoI的接口是一样的)
先在Spring的配置文件中定义"组织Service"与"组织Dao":
<bean id="组织Service"
class="com.sarkuya.service.组织ServiceImpl">
<property name="组织Dao">
<ref bean="组织Dao" />
</property>
</bean>
<bean id="组织Dao"
class="com.sarkuya.model.dao.hibernate.组织DaoImpl">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
这一步比较好理解。问题是如何将我们所需的sessionFactory传过来。Hibernate的sessionFactory不是一个可以用构造方法或setter方法就可以直接生成的类,而是需要进行一定的"运算"后才得出的类,典型的形式如:
sessionFactory = new Configuration().buildSessionFactory();
因此,简单地在Spring中如下配置行不通。
<bean id="sessionFactory"
class="org.hibernate.SessionFactory">
<property name="xxx">
<value>xxx</valu>
</property>
</bean>
所幸,Spring提供了一种可定义由工厂方法所产生的bean的方式。
<bean id="sessionFactory"
class="com.sarkuya.hibernate.util.HibernateUtil"
factory-method="getSessionFactory" />
这种方式,当我们需要得到sessionFacotry的bean时,Spring就会从com.sarkuya.hibernate.util.HibernateUtil的getSessionFactory()方法中获得。这种方式,我们最熟悉不过了:
public class HibernateUtil {
private static final SessionFactory sessionFactory;
static {
try {
sybaseSessionFactory = new Configuration()
.addClass(com.sarkuya.model.cfg.hibernate.组织.class)
.configure("/hibernate_hsql.cfg.xml")
.buildSessionFactory();
} catch (Throwable ex) {
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
好了,以上步骤,我们已经成功地将sessionFactory注入组织Dao中,再注入组织Service中,根据测试先行原则,看看如何在TestCase中获取组织Service这个bean。
二,在代码中获取组织Service。
public class 组织ServiceTest extends TestCase {
private 组织Service 组织Service;
protected void setUp() throws Exception {
String[] configLocation = new String[] {
"/web/WEB-INF/training-service.xml",
"/web/WEB-INF/training-data.xml"
};
ApplicationContext ac = new FileSystemXmlApplicationContext(configLocation);
组织Service = (组织Service)ac.getBean("组织Service");
}
public void testGet组织By名称() {
System.out.println("get组织By名称");
组织 组织 = 组织Service.增加组织(new 组织("aaa"));
组织 = 组织Service.get组织By名称("aaa");
assertEquals("aaa", 组织.get名称());
组织 = 组织Service.get组织By名称("abc");
assertNull(组织);
}
}
三,组织DaoImpl的代码:
/*
* @param 组织名称
* @return 组织 或者 null
*/
public 组织 get组织By名称(String 组织名称) {
Session session = sessionFactory.getCurrentSession();
session.beginTransaction(); //Hiberante3.1以后的代码
组织 组织 = (组织)session.createQuery("from 组织 c where c.名称 = '" + 组织名称 + "'")
.uniqueResult();
session.getTransaction().commit();
return 组织;
}
由上可见,Hibernate的核心代码一点未变,从而在与Spring整合的基础上,实现了与Spring的解耦。
分享到:
相关推荐
在"25_黑马程序员_黎活明_Spring2.5视频教程_搭建和配置Spring与Hibernate整合的环境.avi"这个文件中,可能详细演示了如何配置这些库到项目的类路径中。 接着,需要配置Spring的IoC容器。这可以通过XML配置文件完成...
"Spring与Hibernate整合"是为了实现业务逻辑层和数据访问层的高效协作。整合过程通常包括以下几个步骤: 1. **引入依赖**:首先,需要在项目中添加Spring和Hibernate的相关库。这通常通过Maven或Gradle的依赖管理来...
Spring 和 Hibernate 的整合是企业级 Java 应用开发中的常见实践,它将 Spring 框架的控制反转(IoC)和面向切面编程(AOP)优势与 Hibernate 的持久化能力相结合,提供了更高效、灵活的数据库操作。下面我们将深入...
总之,Spring 和 Hibernate 的整合是 Java Web 开发中的常见实践,它利用 Spring 的强大管理能力和事务处理,结合 Hibernate 的 ORM 功能,简化了数据库操作和事务管理,提高了软件的可扩展性和可维护性。...
通过阅读和理解提供的"Spring,Hibernate整合源码",可以深入学习如何在实际项目中将这两个框架融合,掌握最佳实践,提高开发效率。源码分析通常涉及对配置文件的理解,如Spring的beans.xml和Hibernate的hibernate....
《WebWork.Spring.Hibernate整合开发网络书城》这个主题涵盖了三个关键的技术框架:WebWork、Spring和Hibernate。这些技术在现代企业级Java应用开发中扮演着至关重要的角色,特别是对于构建复杂的、数据驱动的Web...
在Spring与Hibernate整合的过程中,c3p0是一个重要的第三方组件,它是一个开源的JDBC连接池,能够有效地管理和重用数据库连接,从而减少创建和关闭连接的开销,提高系统性能。c3p0提供了许多配置选项,如最小连接数...
Struts+Spring+Hibernate 整合是Java Web开发中常用的一种技术栈,它结合了三个强大的框架,分别负责表现层(Struts)、业务逻辑层(Spring)和持久化层(Hibernate)。这种组合提供了完整的MVC架构,使得开发过程...
#### 二、Struts+Spring+Hibernate整合实践 **2.1 Spring整合Struts** **2.1.1 整合理念** Spring框架可以用来整合Struts框架,以实现更高级别的松耦合。通过这种方式,可以确保业务逻辑与UI逻辑的分离,同时也...
《轻量级Java EE企业应用实战——Struts 2+Spring+Hibernate整合开发电子书1》是一本专注于Java EE企业级应用开发的书籍,主要涵盖了Struts 2、Spring和Hibernate这三个流行开源框架的整合应用。这本书对于Java...
《轻量级 J2EE 企业应用实战:Struts+Spring+Hibernate 整合开发》是一本深入探讨Java企业级应用程序开发的经典著作。该书主要围绕着三个核心框架——Struts、Spring和Hibernate,详细阐述了如何在J2EE环境下进行轻...
本压缩包"Spring与Hibernate整合.zip"显然包含了一个关于如何将这两个框架集成到同一Java EE项目的教程或示例代码。下面将详细讲解Spring和Hibernate整合的关键步骤和概念。 1. **Spring的Bean管理**:首先,Spring...
整合这三个框架的目的是提高开发效率,降低维护成本,通过Spring的IoC和AOP特性,实现组件间的解耦和事务管理,而Hibernate则简化了数据库操作。在实际项目中,这种整合提供了强大的后端架构,能够应对复杂的业务...
这个"struts2+spring+hibernate整合小案例"是一个用于教学和实践的DEMO,旨在帮助开发者理解和掌握这三大框架的协同工作方式。 首先,Struts2作为MVC(模型-视图-控制器)架构的一部分,主要负责处理HTTP请求,提供...
在本文中,我们将深入探讨如何将Spring框架与Hibernate ORM(对象...通过以上步骤,我们可以成功地将Spring与Hibernate整合,实现高效的数据访问层。这个案例旨在帮助初学者理解整合过程,并为实际项目开发提供参考。
整合Struts、Spring和Hibernate的主要目的是消除各框架之间的耦合,实现更好的解耦和模块化。在SSH整合中,通常会使用Spring来管理Struts的Action和Hibernate的SessionFactory,Spring的AOP可以用来处理事务管理。...
Struts1、Spring和Hibernate是Java Web开发中的三大框架,它们各自解决了一部分问题,而将它们整合在一起,可以构建出高效、灵活的企业级应用程序。这里我们主要探讨这三者整合时所需的核心jar包以及它们的功能。 ...
整合Struts2、Spring和Hibernate可以实现业务逻辑、控制流程和持久层的解耦,提高代码的可读性和可维护性。然而,这个过程需要注意版本兼容性,避免因不同版本间的冲突导致问题。同时,理解并熟练掌握这三个框架的...
以上是对"struts2+spring+hibernate整合实例"的详细解释,整合这三大框架能够构建出功能强大的企业级Web应用,但同时也需要开发者具备扎实的Java基础和良好的架构设计能力。在实际项目中,应根据需求选择最合适的...
【标题】"java+Spring+Hibernate整合的企业OA源码"所代表的是一个使用Java编程语言,结合Spring框架和Hibernate持久层框架实现的企业级办公自动化(Office Automation,简称OA)系统的源代码。这样的系统通常用于...