Spring的hibernate模板何时使用,为什么?

问候,目前正在开发小型Web服务应用程序,其中来自Web服务(使用CXF + Spring)的响应被处理并保存到数据库中。 为了使用数据库,我使用了Hibernate(3.5)。 在网上浏览一些Hibernate + Spring的例子,我经常可以看到HibernateTemplate的用法,所以我对这一刻有些困惑,想问一下:

你在你的Hibernate3应用程序中使用HibernateTemplate吗? 何时HibernateTemplate可以使您的开发生活更好,并根据我可以决定什么点我需要使用它吗?

谢谢。

所有的Spring模板(hibernate,jdbc,rest,jpa等)都有相同的优点和缺点:

Pro:他们为您执行常见的安装例程,让您跳过样板并专注于您想要的逻辑。

Con:你把你的应用程序紧紧地绑定到spring框架上。 出于这个原因,Springbuild议不要再使用HibernateTemplate

具体来说, HibernateTemplate为你做的是在代码执行后自动打开和closures会话并提交或回滚事务。 不过,所有这些都可以通过使用Spring的声明式事务pipe理以面向方面的方式来实现。

参考:

  • Spring参考: ORM:Hibernate为当前build议的Spring Hibernate使用模式
  • Spring参考: Classic Spring用法:HibernateTemplate

更新:

从Spring 3.1(及更新版本)开始, HibernateTemplate已经被删除 。 请参阅Hibernate获取当前build议的使用模式。

让我澄清一点,Spring的HibernateTemplate将不会得到支持,这意味着Hibernate 4+版本不支持HibernateTemplate。 所以build议使用Seanbuild议的声明式事务pipe理 。

HibernateTemplate为你封装了很多东西,让你的生活更轻松。

这是你select使用它或不。 对于这个问题,你可以在没有Hibernate的情况下使用数据库。 Spring的JDBC的东西是非常好的。 您可能会发现,无需学习Hibernate就可以轻松完成您的问题。

OpenSessionInViewFilter模式是有效的。 这将打开一个Hibernate会话并将其绑定到您的线程,在处理每个请求期间。 OpenSessionInView还将会话和可载入性扩展到视图渲染和视图层,这减less了耦合和复杂性(通过使其“只是工作”)。

我的哲学并不完全同意基于方面/声明式的交易pipe理。 我喜欢把重要的状态变化/生命周期事件“明确”化,因为它们应该是绝对确定的 – 而不是依赖于多个隐藏层和间接层,这些层可能工作也可能不工作。

它提供了一个要debugging的地方。

TX提交只是一行代码; 但它是你想要断点的主要部分。 不再是语法上的,而是“事务性”声明; 但更确定的地狱。

坦率地说,我发现“用户命令”或“请求”是应用程序中的起始事务和控制事务性的适当位置,应该是结构良好的,明确的和相当明确的。

(我没有办法让类加载的东西起作用,在第一次出现的时候就尝试了,我的评估是,与写得很好的OO代码相比,方面只有有限的边际价值。

提示:我通常会build立一个辅助类,以使得Session和提交事务变得非常方便。

HbHelper或其他。

所有的模板将被弃用。 更好地使用JPA标准的实体pipe理器。