Hibernate要开启事务,然后再进行数据库的操作,最后提交事务,这过程都是要我们手写的,而加入spring后,那么事务的开启关闭等就可以交给spring来管理,可以在spring配置文件里写好如下配置:
<!-- 要用的数据库的访问操作,即要开启事务来处理业务时,下面的transactionManager就必须配置,而若只用spring那么可以直接配下一个"启动spring注解功能 " -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!--启动spring注解功能-->
<tx:annotation-driven transaction-manager="transactionManager"
proxy-target-class="true" />
在要用到事务的地方(也就是工进行数据库的操作地方)加入开启事务支持:@Transactional
这样做后,我们就可以直接使用数据库操作,而不用我们自己手工开关事务了。
HibernateDaoSupport也是由spring提供给Hibernate的对数据访问的工具类,
该类主要提供了两个方法:
public final HibernateTemplate getHibernateTemplate()
public final void setSessionFactory(SessionFactory sessionFactory)
其中,setSessionFactory方法接收来自Spring的applicationContext的依赖注入,接收了配置在Spring中的SessionFactory实例,getHibernateTemplate方法用来利用刚才的SessionFactory生成Session,再生成HibernateTemplate来完成数据库的访问。
典型的继承HibernateDaoSupport的DAO代码如下:
public class UserDAOImpl extends HibernateDaoSupport implements UserDAO{
public void save(Users transientInstance) {
log.debug("saving Users instance");
try {
getHibernateTemplate().save(transientInstance);
log.debug("save successful");
} catch (RuntimeException re) {
log.error("save failed", re);
throw re;
}
}
………………
}
实际上,DAO的实现依然借助了HibernateTemplate的模板访问方式,只是,HibernateDaoSupport将依赖注入SessionFactory的工作已经完成,获取HibernateTemplate的工作也已经完成。注意,这种方法须在Spring的配置文件中配置SessionFactory:
<!-- 下面应该是表示使用AnnotationConfiguration配置和生成SessionFactory,并且要指明hibernate配置文件的位置 -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" >
<property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
</bean>
在继承HibrnateDaoSupport的DAO实现里,Hibernate Session的管理完全不需要Hibernate代码打开,而由Spring来管理。Spring会根据实际的操作,采用“每次事务打开一次session”的策略,自动提高数据库访问的性能。
hibernate的事务管理请见下一篇。
分享到:
相关推荐
spring整合hibernate实现事务处理 1.spring整合hibernate实现事务处理-注解方式 2.spring整合hibernate实现事务处理-XML方式
spring3,hibernate4 配置声明式事务管理(annotation方式)
HibernateSHibernateSpring数据库的事务HibernateSpring数据库的事务HibernateSpring数据库的事务pring数据库的事务
Spring+Hibernate 使用TransactionInterceptor声明式事务配置
两个项目,一个项目是基于spring jdbc实现的分布式事务,一个是基于spring hibernate的分布式事务,hibernate项目里的applicationContext2.xml是基于mysql和mssql, applicationContext3.xml基于两个mssql, ...
Spring Hibernate 事务处理 详细说明 Spring Hibernate 事务处理 详细说明
spring mvc hibernate整合,采用MyEclipse自动生成包和配置文件,jar包可能有多余,但是不影响整体效果。服务器tomcat。数据库mysql。
NULL 博文链接:https://quicker.iteye.com/blog/674029
Spring将事务管理分成了两类: * 编程式事务管理 * 手动编写代码进行事务管理.(很少使用) * 声明式事务管理: * 基于TransactionProxyFactoryBean的方式.(很少使用) * 需要为每个进行事务管理的类,配置一个...
在Spring中配置Hibernate事务
Spring2.5+hibernate搞定分布式事务Spring2.5+hibernate搞定分Spring2.5+hibernate搞定分布式事务布式事务 第三部分
spring mvc hibernate 实现事务管理 jar包管理用maven,启动服务器用jetty,里边还有memcached数据库,但是本例子没有用到。
Spring+Hibernate注解声明式事务实例
Spring与Hibernate集成声明式事务.ppt
一个简单的spring+hibernate+mysql 事务实例
NULL 博文链接:https://microjava.iteye.com/blog/525981
声明式事务控制,spring2.5+hibernate3集成源码,附带有数据库脚本,可以直接导入到项目的工作空间。欢迎下载
一个小实例工程,说的是spring3+hibernate4配置声明式事务管理(annotation方式)
spring-hibernate.jar