spring-jdbc vs spring-data-jdbc及其支持什么

时间:2018-08-20 01:11:44

标签: java spring jdbc spring-jdbc spring-data-jdbc

我很好奇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 个答案:

答案 0 :(得分:6)

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 DataSources很好地融入了Spring的事务管理功能,例如@Transactional注释。 此外,JdbcTemplate是此模块的一部分,它使您可以执行SQL语句并从结果集中提取对象,而无需处理异常处理或正确关闭语句,连接等的令人讨厌的细节。

spring-data-jdbc

另一方面,

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

以引用的示例为例:

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
}