|
Hibernate与Spring整合后,就可以使用IoC及AOP的功能了,好处不在多言。另外一个好处,就是可以通过使用Spring的HibernateTemplate来简化数据库CRUD代码。然而,正是这个HibernateTemplate,存在着以下的缺点: 一是功能不全,不如Hibernate的储如createQuery()等方法方便、灵活与强大,使用颇受限制; 正是由于这三点,使我抵制住了使用HibernateTemplate的诱惑,在将Spring与Hibernate整合后,通过简单的配置,在Spring程序中自由地使用Hibernate3.1.2的功能。这样既可以实现强强联手,又可以在Hibernate新版本出来后,马上进行重新整合,无需等着新版的Spring出来。 在实现上,主要有三点。 一是在Spring的配置文件中,无需定义长长的hibernateTemplate,只需定义sessionFacotry就行了。 例如,设有一"组织DaoImpl",实现了"组织Dao"及"HibernateDao"两个接口。而"组织Service"通过将"组织DaoImpl"封装起来,对外提供相应的数据库功能服务。 public interface HibernateDao { public interface 组织Dao { public class 组织DaoImpl implements 组织Dao, HibernateDao { public void setSessionFactory(SessionFactory sessionFactory) { public 组织 get组织By名称(String 组织名称) { public interface 组织Service { (实际代码中,组织Service与组织DaoI的接口是一样的) 先在Spring的配置文件中定义"组织Service"与"组织Dao": <bean id="组织Service" <bean id="组织Dao" 这一步比较好理解。问题是如何将我们所需的sessionFactory传过来。Hibernate的sessionFactory不是一个可以用构造方法或setter方法就可以直接生成的类,而是需要进行一定的"运算"后才得出的类,典型的形式如: sessionFactory = new Configuration().buildSessionFactory(); 因此,简单地在Spring中如下配置行不通。 <bean id="sessionFactory" 所幸,Spring提供了一种可定义由工厂方法所产生的bean的方式。 <bean id="sessionFactory" 这种方式,当我们需要得到sessionFacotry的bean时,Spring就会从com.sarkuya.hibernate.util.HibernateUtil的getSessionFactory()方法中获得。这种方式,我们最熟悉不过了: public class HibernateUtil { 好了,以上步骤,我们已经成功地将sessionFactory注入组织Dao中,再注入组织Service中,根据测试先行原则,看看如何在TestCase中获取组织Service这个bean。 二,在代码中获取组织Service。 public class 组织ServiceTest extends TestCase { protected void setUp() throws Exception { public void testGet组织By名称() { 三,组织DaoImpl的代码: /* 由上可见,Hibernate的核心代码一点未变,从而在与Spring整合的基础上,实现了与Spring的解耦。
转自:http://hi.baidu.com/injava/blog/item/c08eaf3823f99ec3d4622528.html
|
Spring与Hibernate的整合与解耦
Spring与Hibernate整合实践
最新推荐文章于 2019-11-12 16:31:29 发布
本文介绍了一种在Spring与Hibernate整合过程中避免使用HibernateTemplate的方法,通过直接注入SessionFactory并利用Spring的依赖注入特性,实现了对Hibernate核心功能的充分利用,并保持了与Spring的良好解耦。
3090

被折叠的 条评论
为什么被折叠?



