Spring提供訪問數據庫的有三種方式: HibernateDaoSupport,HibernateTemplate(推薦使用),jdbcTemplatejava
前提:mysql
Spring若是想整合hibernate的話,首先就應該得到SessionFactory這個類,而後再經過得到session就能夠進行訪問數據庫了,即Spring提供的類HibernateDaoSupport,HibernateTemplate應該是有setSessionFactory,在使用的時候注入一下就能夠了spring
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="dataSource" ref="dataSource"></property> <property name="annotatedClasses"> <list> <value>com.zcy.model.User</value> <value>com.zcy.model.Log</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect"> org.hibernate.dialect.OracleDialect </prop> <prop key="hibernate.hbm2ddl.auto">update</prop> <prop key="hibernate.show_sql"> true </prop> </props> </property> </bean>
1.對於HibernateTemplate:sql
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"> <property name="sessionFactory" ref="sessionFactory"></property> </bean>
而後在程序中直接用就能夠了,以下:數據庫
@Component("u") public class UserDaoImpl_HibernateTemplate implements UserDao { private HibernateTemplate hibernateTemplate; @Resource public void setHibernateTemplate(HibernateTemplate hibernateTemplate) { this.hibernateTemplate = hibernateTemplate; } public void save(User user) { hibernateTemplate.save(user); } }
2.對於HibernateDaoSupport:session
public final void setSessionFactory(SessionFactory sessionFactory) public final SessionFactory getSessionFactory() public final void setHibernateTemplate(HibernateTemplate hibernateTemplate) public final HibernateTemplate getHibernateTemplate()
從它類裏的方法能夠知道,在使用的時候只須要將sessionFactory注入給HibernateDaoSupport,而後就能夠經過getHibernateTemplate()來得到HibernateTemplate,這樣就可使用HibernateTemplate了,就和上面使用HibernateTemplate的同樣的(顯然這有點繞了一點彎,我的感受仍是直接使用HibernateTemplate就能夠了,不過根據我的喜愛或項目的需求而定)this
下面是實現設計的方法:spa
service: public class UserService { private UserDao userDao; public void setUserDao(UserDao userDao) { this.userDao = userDao; } public void add(User user){ userDao.save(user); }
dao: public class UserDaoImpl extends HibernateDaoSupport implements UserDao { public void save(User user) { this.getHibernateTemplate().save(user); } }
bean.xml: <bean id="userService" class="com.zcy.service.UserService"> <property name="userDao" ref="userDao"></property> </bean> <bean id="userDao" class="com.zcy.dao.impl.UserDaoImpl"> <property name="sessionFactory" ref="sessionFactory"></property> </bean>
這裏的sessionFacotry注入不是給類UserDaoImpl 的,而是給繼承HibernateDaoSupport類的sessionFactory,使用HibernateDaoSupport好處就是咱們再也不須要關心關閉、是否鏈接成功等問題(在使用spring封裝的這些類,即HibernateDaoSupport,HibernateTemplate,jdbcTemplate,都不須要關心是否關閉,是否鏈接的問題,由於spring已這些操做封裝給注入好了),這樣用起來很方便。.net
可是這個很差就是Java只支持單繼承,因此惟一的繼承給了HibernateDaoSupport有點惋惜。另外注意的是由於HibernateDaoSupport已經有setSessionFactory(SessionFactory sessionFactory)這個方法了,因此在UserDaoImpl 的類裏就不須要寫了,而且HibernateDaoSupport的setSessionFactory的方法時final的,因此重寫還會報錯的。hibernate
對於jdbcTemplate之後再作整理吧。