Java Hibernate vs JDBI
我正在使用Dropwizard框架(版本0.7.0)构建一个web服务。它涉及到对数据库执行一些只读查询,操作结果集,然后返回该数据集。我使用MySQL作为数据库引擎。由于我是这个框架的新手,我想知道我应该选择哪个选项:Hibernate还是JDBI。如果您对数据库的工作很少,那么就使用JDBI,否则就使用Hibernate,因为它非常强大,并且为您的持久性逻辑提供了许多附加功能。实际上,这两种解决方案都只是“锁定” 如果您想使用持久化模型类型接口,请针对JPA(如果您确定它只返回到关系数据库)或JDO(如果您可能想返回到关系数据库和其他类型数据库,如无SQL移动)编写代码。这是因为使用这两种解决方案中的任何一种,当出现问题时,您可以切换持久性提供程序,而无需重写大部分代码 如果您想使用过程持久性模型(直接处理SQL查询等),那么可以使用JDBi甚至JDBC。JDBi在JDBC上提供了一个非常好的抽象;但是,在某些情况下,您需要较低级别的访问(出于性能原因,您正在协调调整查询和数据库)。同样,JDBC是一种标准,您可以轻松地将一个数据库替换为另一个数据库;然而,SQL本身并不容易替换 为了修正SQL交换问题,我建议使用一组属性文件来保存查询,然后使用资源加载器类型的机制将正确数据库的SQL绑定到代码。它不是100%万无一失;但它确实让你走得更远Java Hibernate vs JDBI,java,sql,hibernate,dropwizard,jdbi,Java,Sql,Hibernate,Dropwizard,Jdbi,我正在使用Dropwizard框架(版本0.7.0)构建一个web服务。它涉及到对数据库执行一些只读查询,操作结果集,然后返回该数据集。我使用MySQL作为数据库引擎。由于我是这个框架的新手,我想知道我应该选择哪个选项:Hibernate还是JDBI。如果您对数据库的工作很少,那么就使用JDBI,否则就使用Hibernate,因为它非常强大,并且为您的持久性逻辑提供了许多附加功能。实际上,这两种解决方案都只是“锁定” 如果您想使用持久化模型类型接口,请针对JPA(如果您确定它只返回到关系数据库)
现在,如果你问我会用什么,我强烈推荐JDO。这两种我都用过。我在Grails和传统的Spring应用程序中使用了Hibernate和GORM,在Dropwizard中使用了JDBI 我非常喜欢JDBI的简单性,下面是我为什么喜欢它而不是Hibernate的几个原因
特别是对于您的情况,听起来您需要一些轻量级的东西,因为您没有太多的用例,在我看来,这肯定是JDBI优于Hibernate。“在不重写大部分代码的情况下切换持久性提供程序”有点。。。太乐观了。对于一个不平凡的项目,更改JPA提供者将是一个挑战。我曾经参与过这样一个项目(Hibernate->EclipseLink),结果比预期的要困难得多。(这是一个纯粹基于JPA的应用程序!)。如果您的应用程序使用了一些没有JPA替代方案的扩展(如hibernate envers)…@Gmugra如果您仅使用ANSI SQL(几乎没有人约束自己)保持非常严格的控制,您可以非常轻松地切换。问题是,人们最终对SQL或DML命令进行了特定于服务器的扩展,这些扩展是不可移植的。JDO的好处是,如果您这样做的话,JDO堆栈将编写与服务器匹配的SQL。对于只需要简单SQL的简单应用程序,您确实会很好。(但为什么要将巨大的ORM应用于琐碎的应用程序呢?)但任何向左和向右的步骤,即使相对简单,都会导致可能的问题。e、 相对简单的JPQL查询在Hibernate中运行良好,但需要对EclipseLink进行修改(通常是愚蠢的修改),因此我们遇到了很多问题。此外,JPA规范并非总是100%明确。在某些情况下,提供程序可能会采用不同的方式,根据规范,这些方式是可以的,但彼此不兼容。@Gmugra正如我前面所说的,您总是可以使用JDO。没有SQL,不需要修改SQL。