10

我正在使用 Dropwizard 框架(版本 0.7.0)构建 Web 服务。它涉及对数据库执行一些只读查询,操作结果集,然后返回该数据集。我使用 MySQL 作为数据库引擎。由于我是这个框架的新手,我想知道我应该选择哪个选项:Hibernate 或 JDBI。

4

3 回答 3

23

这两个我都用过。我在 Grails 以及传统的 Spring 应用程序中使用了 Hibernate 和 GORM,并且在 Dropwizard 中使用了 JDBI。

我真的很喜欢 JDBI 的简单性,以下是我更喜欢它而不是 Hibernate 的几个原因。

  1. 我确切地知道要执行什么 SQL 来获取我请求的数据。使用 Hibernate,您有时可能不得不对 HQL 进行大量处理,并将您的对象配置为您想要返回的内容。您最终求助于 SQL,但随后很难将您的结果正确映射回您的域对象,或者您放弃并允许 hibernate 一个一个地获取它们。

  2. 我不需要担心延迟/渴望获取以及这将如何影响我在大型数据集上的查询时间。

  3. 映射并不复杂,因为您可以自行管理它们,并且您不必依赖获得正确的注释和优化组合。

特别是对于您的情况,听起来您想要一些轻量级的东西,因为您没有很多用例,在我看来,这肯定是 JDBI over Hibernate。

于 2014-10-20T17:50:17.773 回答
4

实际上,这两种解决方案都只是“锁定”。

如果您想使用持久模型类型接口,请针对 JPA(如果您确定它只会返回到关系数据库)或 JDO(如果您可能想要返回到关系和其他类型的数据库,例如无 SQL 运动)。这是因为使用这些解决方案中的任何一个,当出现问题时,您都可以切换持久性提供程序,而无需重写大量代码。

如果您想使用过程持久性模型(直接处理 SQL 查询等),那么使用 JDBi 甚至 JDBC。JDBi 在 JDBC 之上提供了一个非常好的抽象;但是,在某些情况下,您需要较低级别的访问权限(出于性能原因,您正在协同调整查询和数据库)。同样,JDBC 是一种标准,因此您可以轻松地将一个数据库换成另一个数据库;但是,SQL 本身不会那么容易换出。

为了修正 SQL 交换问题,我建议使用属性文件集来保存查询,然后使用资源加载器类型机制将正确数据库的 SQL 绑定到代码。它不是 100% 万无一失的。但它确实让你更进一步。

现在,如果你问我会使用什么,我强烈推荐 JDO。

于 2014-10-19T04:34:00.840 回答
2

如果您在数据库方面的工作很少,那么请使用 JDBI,否则请使用 Hibernate,因为它非常强大,并为您的持久性逻辑提供了许多附加功能。

于 2014-10-19T04:24:01.800 回答