当前位置: 首页 > 科技观察

为什么要用Spring来管理Hibernate?

时间:2023-03-16 19:30:25 科技观察

为什么要用Hibernate框架?这个在《Hibernate介绍》的博客里已经提到了。既然是用Hibernate框架来访问和管理持久层,那为什么还要提到用Spring来管理和集成Hibernate呢?首先我们来看一下Hibernate运行的步骤。例如,添加用户的步骤。在之前的博客中,《八步详解Hibernate的搭建及使用》详细介绍了Hibernate的使用步骤。以下代码来自上一篇博客。为了解释这里提出的问题,我只截图了。如果想看完整的代码示例,可以参考《八步详解Hibernate的搭建及使用》看截图。可以看出Hibernate运行的步骤如下:获取Configuration对象创建SessionFactory创建一个Session开启一个事务进行持久化操作。比如上面的添加用户操作,提交事务,发生异常,回滚事务,关闭事务,使用Hibernate访问持久层,这八个步骤每次都必须执行。但是如果用Spring来管理Hibernate呢?首先,Spring为Hibernate提供了HibernateTemple类。这个模板类封装了会话。而Spring默认会自动提交事务。dao层直接写this.save(Object)即可。在实践中遇到了无法插入数据库的问题。经过多方折腾,多方实验,验证,总结原因,结果如下:注意:所有操作都必须在事务中进行。如果单纯使用Hibernate,事务需要手动打开、提交和关闭。当然也可以在Hibernate配置文件中自动提交。如果使用Spring来管理Hibernate,默认是自动提交事务。但是这里需要注意的是,如果使用Spring在配置文件中配置数据源而不是hibernate.cfg.xml,是可以成功插入数据库的,因为HibernateTemple默认提供了自动提交事务。在Spring配置文件中配置数据源如下:使用该数据源所需的jar如下:commons-dbcp.jar、commons-pool.jar、msbase.jar、mssqlserver.jar、msutil.jar、sqljdbc4。jar;org.hibernate.dialect.SQLServerDialectupdate!--如果你使用传统的hbm.xmlxml,类是LocalSessionFactoryBean-->classpath:User.hbm.xml如果Spring没有直接配置数据源,但是使用的是hibernate.cfg.xml,如果直接是this.save(Object)是不能插入到数据库中的,但是可以保存到缓存中因为所有的操作都是在事务中进行的,而hibernate.cfg.xml数据源默认不会自动提交。解决方法如下:hibernate.cfg.xml可以填写:true下面Spring使用hibernate.cfg.xml数据源classpath:hibernate.cfg.xmlclasspath:User.hbm.xml上面引入Spring来管理Hibernate的好处是不需要手动创建SessionFactory、Session,并手动打开、提交和关闭交易。一切都完全由Spring管理。并且Spring还提供了HibernateTemple工具,让所有的操作变得简单方便。dao层在Spring配置文件中配置如下:sessionFactory">dao层中的代码如下:packagecom.UserDao;importorg.springframework.orm.hibernate3.HibernateTemplate;importcom.user.用户;publicclassUserDaoImplextendsHibernateTemplateimplementsUserDao{@Overridepublicvoidinsert(Useruser){这个。保存(用户);}}这只是关键代码。至于完整的小demo,已经上传了。如上所述,所有操作都在事务中执行。交易的概念想必大家都不陌生。一般来说,事务应该应用在业务逻辑层,而不是dao层。而且Spring对事务有很好的封装,它有一套事务管理的封装,将业务逻辑和事务管理分开,进一步实现了解耦。在下一篇博客中,我们将继续讲解Spring管理Hibernate中的事务管理。原文链接:http://blog.csdn.net/llhhyy1989/article/details/7430086【编者推荐】Java并行编程:从并行任务集获取反馈Hibernate复合主键映射Hibernate事务和并发问题处理让Hibernate显示SQL语句绑定参数值Hibernate延迟加载分析及代理模式应用