Spring的JdbcTemplate VS休眠在性能方面[关闭](Spring JDBCTempl

2019-07-30 18:31发布

在我们的项目,我们有Spring的JdbcTemplate和Hibernate之间作出选择。

我想知道这是在性能和实现和设计方面更好 如何?

Answer 1:

如果你尽你所能,以使双方实现非常快,JDBC模板很可能会更快一点,因为它不具备开销休眠了。 但是,它可能会花费更多的时间和代码行来实现。

Hibernate有其学习曲线,你必须了解在幕后发生了什么,何时使用预测而不是返回实体,等等。但是,如果你掌握了它,你将获得更多的时间和更简洁和更简单的代码比用JDBC基于解决方案。

我要说的是,在案件95%,Hibernate是速度不够快,或者甚至快于非优化JDBC代码。 对于5%左右,没有禁止你使用别的东西,比如Spring-JDBC例如。 这两种解决方案不是相互排斥的。



Answer 2:

这取决于你的项目和如何休眠模式适合你的思考方式。 速度/性能是无关紧要的:如果你不能完成你的头脑如何休眠的作品,您的项目将有奇怪的错误,将采取年龄找到并修复百出。

还要注意的是休眠的内部会泄漏到模型和DAO。 冲突的著名的点通常equals()/hashCode()和交易以外的集合延迟加载。 由于使用Hibernate的例子是如此简单,你可以在很短的时间实现了很多,这可能导致对Hibernate是简单的误解。 不是。 Hibernate会以某种方式有很多假设,并迫使你思考和代码。

使用JdbcTemplate更容易,因为它只是围绕JDBC本身是一个非常薄的包装。 这里的价格,你会写几千真没意思行代码。 此外,你会发现,SQL字符串是真的很难维持。 当你的数据模型的变化,你将不得不寻找你的整个代码库可能会受到影响的所有地方。 这不会是漂亮。

对于我们自己的项目,我们决定对Hibernate的,因为我们有非常复杂的数据结构(revisioned树形结构),并有在运行时创建复杂的搜索查询。 相反,我们使用写我们自己的DAO层jOOQ 。 jOOQ是围绕JDBC瘦包装,它允许你写SQL与Java的一个很好的DSL:

create.selectFrom(BOOK)
      .where(PUBLISHED_IN.equal(2011))
      .orderBy(TITLE)

像Hibernate,jOOQ有你应该遵循一些规则,否则你也不会开心,但这些都是宽松得多。

作为另一种选择,你应该看看春季的数据 。 概括地说,春季数据,您可以将数据存储到任何远程类似的数据库。 这意味着你可以管理与Hibernate和其他使用的NoSQL数据库模型。 或者,您可以根据需要轻松地迁移模型的一部分。

其中一个重要的特点是,DAO 实现看起来就像这样:

public interface UserRepository extends Repository<User, Long> {

  List<User> findByEmailAddressAndLastname(String emailAddress, String lastname);
}

现在,你可能不知道其实现是因为这只是一个方法定义一个接口,但仅此而已。 在运行时,春天的数据将为您生成的代码,将实现该方法。 这是可能的,因为您将需要的所有查询的99%的形式是“为其中列X是所有行查询表......”,所以他们优化这种使用情况。

OTOH,如果你已经知道你要建在运行时非常复杂的搜索查询,春数据可能不会有很大帮助。



Answer 3:

在我们的项目中,我们使用两者JdbcTemplateHibernate 。 什么,你需要做的是共享DataSource之间的hibernatejdbcTemplate 。 两个依法操作,取其更好,我们用更好的一个,我们可以检查性能。 主要是我们正在使用Hibernate进行正常操作,如果有大的查询或繁重的作业,我们检查JDBC性能和休眠我们使用它取好。

良好的心态是为HibernateTransactionManager同时适用于(JdbcTemplate的,普通的JDBC)和休眠。



Answer 4:

是数据库设计冬眠友好吗? 如果是的话那么用hibernate ...如果没有,那么你可能想避免它。 JdbcTemplate的有许多积极以及有办法,以确保您的SQL查询易于维护。 有持有所有这些类或从文件中读取他们等,如果列必须更新有使用标准的JDBC来获得结果集元数据,让您检索列名的方式。 这可能是复杂的,但解决问题的有趣的方式。 Hibernate是一个伟大的工具,但复杂的数据模型,使它获得真正棘手。



文章来源: Spring JDBCTemplate VS Hibernate in terms of performance [closed]