过去一星期主要把精力放在了数据库Hibernate和Spring的结合上,所以也搜集和总结了一些有用的资料,整理如下。
自己最大的感受是Spring对Hibernate提供了非常好的支持,包括Session管理、声明式事务管理、代码模板。用Spring包装Hibernate,使用起来非常方便,代码量大大减少,以往每个DAO方法中的重复代码不需要写了,而且因为使用了Spring,直接面向接口编程,整个架构有了层次上的提升。总之一个字,爽!
要把Spring和Hibernate并不难,无非是配置好几个bean。难的是必须把整个架构组织好,不能乱来。首先,要面向接口编程(即使不用Spring,面向接口编程也是非常重要的,是一个程序员能力高低的分水岭),其次,要组织好DAO和Service对象间的关系。最后,要对Spring是如何管理Hibernate的Session和事务有清醒的认识。
1、配置一个dataSource,是给sessionFactory用的。一般人用commons-dbcp,我认为这个连接池不好,Hibernate都不提供内建支持。我用的是c3p0(com.mchange.v2.c3p0.ComboPooledDataSource)。这个连接池也是基于JavaBean的命名规范设置参数的,所有配置起来也狠容易。
2、配置一个hibernate Properties(org.springframework.beans.factory.config.PropertiesFactoryBean),也是给sessionFactory用的。配置它是为了方便,可以把所有要给Hibernate的设置统一放在一起。
3、配置sessionFactory(org.springframework.orm.hibernate3.LocalSessionFactoryBean)。在属性dataSource中ref,在属性hibernateProperties中也ref,这样,sessionFactory就知道到哪去取连接、怎么设置Hibernate了。然后在属性mappingResources中配一个list,把所有的.hbm.xml也进去。
4、配置transactionManager(org.springframework.orm.hibernate3.HibernateTransactionMana
5、为了简化将来service方法的配置,对遵循某些规则命名的service方法自动设置上对应的事务管理,再配一baseTxProxy(org.springframework.transaction.interceptor.TransactionProxyFactoryB
这里面涉及不少技巧,而且没有统一的方法。我的做法是这样的:
DAO接口正常写,DAO的实现类实现接口,同时extends HibernateDaoSupport。在某些简单方法中,如save/saveOrUpdate/update/delete,直接调用getHibernateTemplate()中的相应方法实现。稍微复杂一些的方法,使用