spring-jdbc vs spring-data-jdbc,它们支持啥

Posted

技术标签:

【中文标题】spring-jdbc vs spring-data-jdbc,它们支持啥【英文标题】:spring-jdbc vs spring-data-jdbc and what are they supportingspring-jdbc vs spring-data-jdbc,它们支持什么 【发布时间】:2019-01-26 03:06:54 【问题描述】:

我很好奇 spring-jdbc(我在最新的 spring 版本中缺少的)和 spring-data-jdbc 之间有什么区别。 有区别还是只是重命名(在存储库中我看不到这个)?

是否有地方描述了版本的支持目标(DB/JDBC 规范/JDK)是什么?

例如对于来自 oracle 的普通 JDBC,我可以在此处看到该信息: http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-faq-090281.html#01_03_1 (例如:Oracle DB 12.1/12cR1 上 Java7/Java8 上 ojdbc7.jar 中的 JDBC Spec 4.1)

但我想念 spring-jdbc - 我在哪里可以找到这些信息?

【问题讨论】:

【参考方案1】:

spring-jdbc

spring-jdbc 的文档基本上都在这里:

https://docs.spring.io/spring/docs/current/spring-framework-reference/data-access.html

虽然它并没有特别指出您指向 Spring 项目 spring-jdbc。这个项目只是提供了所有 Spring 抽象,通过普通的 JDBC DataSource 可以与 Spring 框架一起使用。例如,Spring's DataSources 很好地与 Spring 的事务管理功能挂钩,例如 @Transactional 注释。 此外,JdbcTemplate 是该模块的一部分,它允许您执行 SQL 语句并从ResultSets 中提取对象,而无需处理异常处理或正确关闭语句、连接等令人讨厌的细节。

spring-data-jdbc

另一方面,spring-data-jdbcspring-jdbc 之上提供 Spring Data 抽象。也就是说,您可以创建一个 Spring Data CrudRepository 和一个简单的“实体”(不是 JPA 实体!),就像 Spring Data 所做的那样,它会为您创建查询,而无需您通过 JDBC 编写本机 CRUD 查询, as in this example on the spring-data-examples git repo.

以引用的例子作为演示:

interface CategoryRepository extends CrudRepository<Category, Long> 

上面的代码就是你所需要的(使用Category对象名称的自省作为表名的来源(基于NamingStrategy),它的属性作为列,再次类似于JPA,但不使用 JPA

而不是像这样写自己的:

@Repository
public class CategoryRepository 
   public void create(Category category) 
      jdbcTemplate.execute("insert...");
   

  // The rest of my other CRUD operations

【讨论】:

也许你可以用一个例子来说明这一点?与传统方法相比,也许是 CrudRepo 的快速实施。 已编辑。这应该可以解释这个例子做得更好 很好的解释 - 但我仍然缺少支持什么 JDBC 规范的框架版本。我翻阅了文件,但找不到任何关于此的内容。 docs.spring.io/spring/docs/current/spring-framework-reference/… 在第一段中,它说All approaches require a JDBC 2.0-compliant driver, and some advanced features require a JDBC 3.0 driver. @PaulEdison 如果您使用java -verbose:class 而不仅仅是java 运行您的应用程序,它将列出所有加载的类,包括加载它的位置。如果你用 grep 搜索“jdbc”或“driver”,你应该可以找到它。

以上是关于spring-jdbc vs spring-data-jdbc,它们支持啥的主要内容,如果未能解决你的问题,请参考以下文章

Spring-JDBC

Spring-JDBC

CDI 中的 Spring-JDBC 等价物是啥?

Spring-JDBC模板-事务

在 spring-jdbc 中使用“where in”

Spring-JDBC依赖