Amr*_*uta 41 spring hibernate jdbctemplate
在我们的项目中,我们必须在Spring JDBCTemplate和Hibernate之间做出决定.
我想知道哪个在性能,实现和设计方面更好.如何?
JB *_*zet 50
如果你尽一切努力使两个实现都非常快,那么JDBC模板可能会更快一些,因为它没有Hibernate的开销.但它可能需要更多的时间和代码行来实现.
Hibernate有它的学习曲线,你必须了解幕后发生的事情,何时使用投影而不是返回实体等.但是如果你掌握了它,你将获得更多的时间,并且比使用JDBC更清晰,更简单的代码基于解决方案.
我想说,在95%的情况下,Hibernate足够快,甚至比非优化的JDBC代码更快.对于剩下的5%,没有什么禁止你使用别的东西,例如Spring-JDBC.两种解决方案都不是互斥的.
Aar*_*lla 37
这取决于您的项目以及Hibernate模型与您的思维方式的匹配程度.速度/性能无关紧要:如果你无法理解Hibernate的工作原理,那么你的项目将会充满奇怪的错误,需要花费很长时间才能找到并修复.
另请注意,Hibernate的内部会泄漏到您的模型和DAO中.值得注意的冲突点通常equals()/hashCode()是在交易之外延迟加载集合.由于Hibernate的示例非常简单,您可以在短时间内实现很多,这可能会导致误解Hibernate很简单.不是.Hibernate做了很多假设,迫使你以某种方式思考和编码.
使用JdbcTemplate更容易,因为它只是JDBC本身的一个非常薄的包装器.这里的价格是你会写出数千行非常无聊的代码.此外,您会发现SQL字符串很难维护.当您的数据模型发生变化时,您必须在整个代码库中搜索可能受影响的所有地方.它不会很漂亮.
对于我们自己的项目,我们决定不使用Hibernate,因为我们有非常复杂的数据结构(修改过的树结构),并且必须在运行时构建复杂的搜索查询.相反,我们使用jOOQ编写了自己的DAO层.jOOQ是一个围绕JDBC的瘦包装器,它允许您使用Java中的一个不错的DSL编写SQL:
create.selectFrom(BOOK)
.where(PUBLISHED_IN.equal(2011))
.orderBy(TITLE)
Run Code Online (Sandbox Code Playgroud)
像Hibernate一样,jOOQ有一些你应该遵循的规则,否则你会不高兴,但这些规则要宽松得多.
作为另一种选择,您应该查看Spring Data.简而言之,Spring Data允许您将数据存储到远程类似于数据库的任何内容中.这意味着您可以使用Hibernate管理模型,使用NoSQL数据库管理另一个模型.或者,您可以根据需要轻松迁移部分模型.
其中一个关键特性是DAO 实现如下所示:
public interface UserRepository extends Repository<User, Long> {
List<User> findByEmailAddressAndLastname(String emailAddress, String lastname);
}
Run Code Online (Sandbox Code Playgroud)
现在您可能想知道实现的位置,因为这只是一个带有方法定义的接口,但就是这样.在运行时,Spring Data将为您生成实现此方法的代码.这是可能的,因为您需要的所有查询中有99%的格式为"列X为...的所有行的查询表",因此他们优化了此用例.
OTOH,如果你已经知道你将在运行时构建非常复杂的搜索查询,那么Spring Data可能没有多大帮助.
Nan*_*ale 15
在我们的项目中,我们正在使用两者,JdbcTemplate和Hibernate.你需要做的是股票DataSource之间hibernate和jdbcTemplate.我们可以根据操作检查两者的性能,无论哪个更好,我们使用更好的一个.大多数情况下,我们使用hibernate进行正常操作,如果有大量查询或繁重的操作,我们会检查jdbc和hibernate的性能,无论我们使用它们哪个更好.
好处是HibernateTransactionManager适用于(JdbcTemplate,普通jdbc)和hibernate.
| 归档时间: |
|
| 查看次数: |
52011 次 |
| 最近记录: |