我们目前正在使用Spring MVC来实现REST Web服务。我们现在想要实现某种数据持久性,我正在研究选项是什么。 Spring Transactions + Hibernate + MySQL似乎是一种非常流行的方法,但我所看到的每一篇博客/教程都有不同的看法。
任何人都可以指导我使用Spring进行数据持久性的“最佳实践”吗?我想基于它进行注释,因为这对我来说似乎更自然和可维护。
但是现在在某些地方我已经读过HibernateTemplate
不应再使用了。有些人使用* Dao界面和* DaoImpl与@Repository
方法,而其他人使用* Service与@Service
方法。
提前感谢任何建议。
答案 0 :(得分:4)
HibernateTemplate确实不是很有用,Spring文档建议不再使用它。
@Repository和@Service基本上做同样的事情,除了(AFAIK)两件事:
答案 1 :(得分:1)
当hibernate不支持每个线程有一个会话的概念时,需要Hibernate Template。现在更好的方法是直接在SessionFactory上使用getCurrentSession方法。
使用HibernateTemplate的另一个问题是,如果在SessionFactory上暴露出更新的api,那么必须等待新版本的Hibernate Template支持它。
简而言之,直接使用SessionFactory
答案 2 :(得分:0)
HibernateTemplate文档中不鼓励使用HibernateTemplate
注意:从Hibernate 3.0.1开始,事务性Hibernate访问代码也可以用简单的Hibernate风格编码。因此,对于新启动的项目,请考虑采用基于SessionFactory.getCurrentSession()的标准Hibernate3样式的编码数据访问对象。 (Spring的LocalSessionFactoryBean自动支持Hibernate3 getCurrentSession()方法的Spring事务管理。)
@ Repository或@Service的使用没有任何区别,但我相信这些注释将来会有更多的DAO /服务级别支持,这将使它们的使用更加精确。
我个人更喜欢使用DAO层中的@Repository来划分我的服务和业务层。