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 DataSource
s 很好地与 Spring 的事务管理功能挂钩,例如 @Transactional
注释。
此外,JdbcTemplate
是该模块的一部分,它允许您执行 SQL 语句并从ResultSet
s 中提取对象,而无需处理异常处理或正确关闭语句、连接等令人讨厌的细节。
spring-data-jdbc
另一方面,spring-data-jdbc
在 spring-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,它们支持啥的主要内容,如果未能解决你的问题,请参考以下文章