spring-jdbc与spring-data-jdbc有何区别,它们支持什么?

28
我很好奇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规范4.1)

但是我错过了spring-jdbc的信息 - 我在哪里可以找到这些信息?

1个回答

25

spring-jdbc

spring-jdbc文档基本在这里: https://docs.spring.io/spring/docs/current/spring-framework-reference/data-access.html。虽然它没有特别指向Spring项目spring-jdbc,但是这个项目提供了所有Spring对普通JDBC DataSource的抽象,您可以与Spring Framework一起使用。例如,Spring的DataSource很好地钩入了Spring的事务管理功能,如@Transactional注释。此外,JdbcTemplate也是这个模块的一部分,它允许您执行SQL语句并从ResultSet中提取对象,而无需处理异常处理或正确关闭语句、连接等不良细节。

spring-data-jdbc

另一方面,spring-data-jdbc提供了对spring-jdbc的Spring Data抽象。也就是说,您可以创建一个Spring Data CrudRepository和一个简单的“实体”(不是JPA实体!),并且,正如Spring Data所做的那样,它将为您创建查询,而无需编写原生的JDBC CRUD查询,就像这个在spring-data-examples git存储库中的示例

以引用的示例作为演示:

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
}

2
可以举个例子来说明吗?也许可以快速实现 CrudRepo 和传统方法的比较。 - Colton
1
已编辑。这应该更好地解释了示例正在做什么。 - Dovmo
1
在第一个段落中,它说“所有方法都需要符合JDBC 2.0的驱动程序,一些高级功能需要JDBC 3.0驱动程序。” - Dovmo
@PaulEdison JDBC是Java SE的一部分,因此不需要明确的依赖关系。您必须添加您实际想要使用的JDBC驱动程序实现。 - Jens Schauder
1
@PaulEdison 如果你运行应用时使用 java -verbose:class 而不是仅使用 java,它将列出所有加载的类,包括其加载位置。如果你使用 "jdbc" 或 "driver" 进行 grep 就可以找到它了。 - Jens Schauder
显示剩余8条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接