`

spring整合hibernate初步

阅读更多

 spring和hibernate整合时,SessionFactory底层的DataSource可以使用spring的ioc注入,然后你在自己的程序中注入SessionFactory

<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"
		destroy-method="close">
		<!--将数据源注入 LocalSessionFactoryBean(建立hibernate中的sessionfactory的bean工厂,fw里用的是AnnotationSessionFactoryBean)    -->
		<property name="dataSource" ref="dataSource" />
........
</bean>
 
	<bean id="dataSource"
		class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="com.mysql.jdbc.Driver" />
		<property name="url"
			value="jdbc:mysql://localhost:3306/helloworld" />
		<property name="username" value="root" />
		<property name="password" value="root" />
	</bean>

  

使用HibernateTemplate

 

  public class UserDao implements IUserDao {
    HibernateTemplate hibernateTemplate;
    public UserDao() {
    }
    
    public UserDao(SessionFactory sessionFactory) { 
        this.setSessionFactory(sessionFactory);
    }
    public void setSessionFactory(SessionFactory sessionFactory) { 
        this.hibernateTemplate = new HibernateTemplate(sessionFactory); 
   } 
    
    public void insert(User user) {
     
      hibernateTemplate.save(user);
   }

    public User  find(Integer id) {
     User user = (User)hibernateTemplate.get(User.class,id);
        
        return user;
    }
}

 

 使用HibernateDaoSupport

 

         使用HibernateDaoSupport可以简化你管理SessionFactory、HibernateTemplate的工作,因为在HibernateDaoSupport中帮你管理了 SessionFactory、HibernateTemplate ,你只要继承它就ok了

 

 HibernateDaoSupport源代码:

/**
	 * Set the Hibernate SessionFactory to be used by this DAO.
	 * Will automatically create a HibernateTemplate for the given SessionFactory.
	
	 */
public final void setSessionFactory(SessionFactory sessionFactory) {
	  this.hibernateTemplate = createHibernateTemplate(sessionFactory);
	}
protected HibernateTemplate createHibernateTemplate(SessionFactory sessionFactory) {
		return new HibernateTemplate(sessionFactory);
	}

  

 

 Hibernate提供自己的事务管理实现 ,但和spring整合时建议将事务管理交spring来负责,spring提供了:编程式事务管理、声明式事务管理。大多数Spring用户选择声明式事务管理。这是对应用代码影响最小的选择,因此也最符合 非侵入式 轻量级容器的理念。

Spring的声明式事务管理是通过Spring AOP实现的,因为事务方面的代码与Spring绑定并以一种样板式风格使用,不过尽管如此,你一般并不需要理解AOP概念就可以有效地使用Spirng的声明式事务管理。

 

注:具体参考一下《Spring Framework 开发参考手册》声明式事务管理
Spring2.0及以后的版本中声明式事务的配置与之前的版本有相当大的不同。主要差异在于不再需要配置TransactionProxyFactoryBean了。

Spring2.0之前的旧版本风格的配置仍然是有效的;你可以简单地认为新的<tx:tags/>替你定义了TransactionProxyFactoryBean。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics