我正在为自己创建一个小应用程序,该应用程序已经使用Spring进行依赖注入,现在我希望使用Hibernate进行数据库开发 - 简单的CRUD操作。
我读过关于Hibernate的教程,我了解如何将其用于我的简单用例,但我已经看到Spring和Hibernate可以集成。
这种集成是否必要 - 集成而不是正常使用 Hibernate 有什么好处?
好处是巨大的:使用 Spring 提供的声明式事务管理,您可以避免所有繁琐且容易出错的事务和错误管理代码,而无需集成它们。
使用Hibernate而不进行声明性事务处理的典型方法如下所示:
public void doSomeWork() {
Session sess = factory.openSession();
try {
//set transaction timeout to 3 seconds
sess.getTransaction().setTimeout(3);
sess.getTransaction().begin();
// do some work
sess.getTransaction().commit()
}
catch (RuntimeException e) {
sess.getTransaction().rollback();
throw e; // or display error message
}
finally {
sess.close();
}
}
使用 Spring 声明处理的相同方法如下所示:
@Transactional
public void doSomeWork() {
Session sess = factory.getCurrentSession();
// do some work
}
另一个优点是Spring可以使用类路径扫描自动找到所有映射的实体,这允许避免使用休眠或JPA配置文件。
请参阅 LocalSessionFactoryBean.setPackagesToScan()
当你编写一个小应用程序时,Spring boot 是一个很好的解决方案,只需很少的配置,你就可以很好地搭建你的 Web 项目。而且我更喜欢使用春天的jdbc模板代替只是为了冬眠太重了
如果你开发了一个只有很少CRUD操作的小项目,那么Hibernate可以避免,除非你有足够的Hibernate经验。主要问题之一是学习曲线,即理解ORM/会话等。请参阅以下链接,该链接很好地解释了这一点:
https://stackoverflow.com/questions/1607819/weaknesses-of-hibernate