在哪些典型的现实生活场景中,人们会选择Spring Data JDBC / Spring Data JPA与Hibernate?我想了解最适合这两种实现方式的场景。
正如@Naros所说,标题中当前存在的问题实际上并没有解决。似乎我们应该真正看一下4个选项,并且主要列出每种方法的优点,缺点是没有其他方法的优点:
没有Spring数据的JDBC
您可以对所发生的事情进行100%的细粒度控制。框架不会生成或注入任何内容。这听起来像是一个弊端,但是如果您尝试调整映射和配置以使某些JPA实现执行您可以用Java和SQL轻松编写的功能,那么您将了解,这可能是一个好专家。
您不必学习JPA或Spring Data。我个人认为Spring Data很容易,但是我有偏见(请参阅我的个人资料)。但是,一旦您离开了琐碎的实体和设置领域,JPA无疑是具有挑战性的。
您可能想使用一些库来减少样板代码。看一眼:
York
MyBatis
Spring JdbcTemplate(在没有Spring其余部分的情况下可用)
QueryDsl
JDBC与Spring数据
您将获得Spring Data与JDBC相结合的好处(请参见上文):
开箱即用CRUD方法的存储库。
Spring基础结构中的良好集成,用于事务处理,依赖项注入,错误转换,分页…
它仍然是一个非常简单的编程模型。SQL语句恰好在人们期望它们发生的时间发生,并且如果您愿意,可以在不破坏任何抽象的情况下,在有或没有其他框架支持的情况下退回到简单的JDBC。
虽然尚不可用,但将来的更新将为您带来更多好处:
使用查询方法(只需将接口定义为具有findByLastName方法,Spring便会为您动态生成它)来扩展存储库的好方法,也可以使用@query注释或自定义方法。
findByLastName
@query
支持分页
没有Spring数据的Hibernate(或其他JPA实现)
JPA通过JDBC做了很多事情
缓存(第一级,第二级和查询缓存)
通过查询自动创建实例
实体间导航
延迟加载
随着所有这些事情的发生,可能很难理解正在发生的事情和原因。当然, IFF 可以正确地构建应用程序的结构,如果JPA没有提供所需的功能,则可以使用JDBC。但是我多次看到人们未能维持其正常工作所需的结构。显然,如果您不正确地理解JPA的工作原理,那么这尤其困难。
使用Spring Data进行Hibernate(或其他JPA实现)
我在上面列出了Spring Data的好处,只需进行简单的复制和粘贴即可。
当然,这会使整个堆栈变得更加复杂。从用spring- data和hibernate标记的许多问题看来,许多开发人员在确定哪个工具执行功能时遇到了问题。而且从这些问题来看,大多数描述的是Hibernate / JPA而不是Spring Data的问题。
总结一下:
如果要/需要细粒度的控制,请使用JDBC。
如果您要使用JPA,请确保您早日了解它。
如果您选择的持久性技术是Spring Data提供的模块,那么我会使用它。这将使生活更轻松。但是我再次有偏见。